历史
互联网其实早就有了,出现的时间大概是20世纪50-60年代,不过当时互联网只用于科研机构和军事方面。
1965年,Email被发明出来,在当时看来是一个和牛逼的应用,人们不需要在写信,不需要邮递员,一个信息可以瞬间发给一个千里以外的人。
1970年-1975年,Email被广泛使用,人们通过ftp下载Email里面的内容
1980年-1990年,人们迫切需要一种更好的上网方式,当时提出了很多方案,比如HTTP,Gopher,后来因为HTTP简单易用,胜出了,从那以后我们就开始使用HTTP协议进行上网了。
1989年-1992年期间,Tim Berners-Lee,发明了万维网WWW(world wide web),一种适应全世界的网络。
WWW里面主要包含3个东西
1.URI
2.HTTP协议
3.HTML
URI
URI的全称是 UniformResourceIdentifier 中文是 统一资源标识符。
URI 分为 URL 和 URN,我们一般使用 URL 作为网址。
URN:通过 URN 你可以确定一个「唯一的」资源。
百度的解释:标识持久性Internet资源。URN 可以提供一种机制,用于查找和检索定义特定命名空间的架构文件。尽管普通的URL可以提供类似的功能,但是在这方面,URN 更加强大并且更容易管理,因为 URN 可以引用多个 URL。
有点抽象,我的理解是URN就是一个身份证,它对于我们每个人(资源)来说都是唯一的。
URL:统一资源定位符
百度解释:统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
我的理解是,它类似一个地址,它可以定位一个资源某个时间点在那里。比如我上班的时候,我(资源)的位置就是公司,但是我(资源)下班我就回家了,就不在公司,所以说url是定位符,它不是唯一的。
URL的组成:
其实还有端口80没写,但为了方便,我们一般不写80端口号,除了一些特殊的端口号,要写
http://www.baidu.com
.com是顶级域名 baidu是二级域名 www是三级域名
HTTP
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
上面是百度的解释 ,我的理解是HTTP协议,就是教客户端和服务器 ,这两台电脑怎么传输(对话)的
HTML
服务器接受到客户端浏览器的一个请求,会给客户端机子一个响应,这个响应就是HTML,浏览器接收到这个响应,然后翻译出来给我们看。所以HTML就是让我们可以读懂一个页面的东西
总结:URI是让我们可以访问一个页面,HTTP是教服务器和客户端怎么对话,HTML是让我们可以读懂一个页面。
Lee除了发明了这三样东西,还动手做了世界上第一个服务器,第一个浏览器,和第一个网页(info.cern.ch)据说这个网页现在都还可以访问。
DNS
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。
我的理解是,DNS就是一个服务器,因为我们一般上网都是输入域名(因为域名好记啊),但是实际上我们要访问的服务器是一个IP,DNS服务器的作用就是把我们输入的域名翻译成对应的IP,让我们能访问服务器。
当我们输入一个url(网址)按下回车的时候发生了什么?
1.先在浏览器缓存里面找对应的ip,如果找不到,就在本地dns找对应的ip,如果还找不到,就到电信/联通的服务器(DNS服务器)找对应的ip
2.得到对应的ip
3.往Server(服务器)发送一个请求 ,并且由80端口接受
4.Server(服务器)收到请求,并且做出响应了,给Client(客户)发送了一个HTML格式的文件
5.Client(客户)的浏览器下载HTML格式的文件,并由浏览器把html翻译出来
6.网页呈现出来
Server(服务器) + Client(客户) + HTTP(协议:告诉服务器和客户怎么说话)
Server(服务器)
1.上面有很多端口,每个端口只做一件事。(0-2048)都是制定了做某些事情的,比如21是做ftp的,443是做https端口,1080是代理端口,80是http端口
Client(客户)
1.发起请求 2.下载服务器返回的内容,并翻译出来,展现页面
HTTP(协议)
告诉服务器和客户怎么说话
请求的事例
在gitbash里面输入下面的命令
curl -s -v -H "Frank: xxx" -- "https://www.baidu.com" //向百度发送一个请求
请求的内容为
GET / HTTP/1.1 //GET是获得的意思 /表示根目录 HTTP协议类型 1.1 是协议的版本
翻译: 获得 根目录 用的是HTTP协议 版本是1.1
Host: www.baidu.com Host的意思是主机 ,
翻译:我访问的主机是www.baidu.com
User-Agent: curl/7.54.0
翻译:我用的软件是curl 版本好是7.54.0
Accept: */*
翻译:我接受你返回给我的任何东西
Frank: xxx //这个没意义,无视就行了
响应的内容
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive < Content-Length: 2443 // 响应的大小
< Content-Type: text/html // 响应的类型
< Date: Sun, 26 Nov 2017 10:40:22 GMT
< Etag: "58860421-98b"
< Last-Modified: Mon, 23 Jan 2017 13:24:49 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
GET 获取内容
POST 上传内容 登陆某网站的时候
PUT 更新 整体更新
PATCH 更新 局部更新
Delete 删除
一般发情命令的请求就是这些 POST是在输入账号密码的时候用的 ,如图
POST命令是在输入账号密码登陆时候,发出的请求,这时候我们看请求,GET变成了POST,From Data里面就是我们上传到系统的字符串(账号和密码)。
请求的格式
1 动词 路径 协议/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3
4 要上传的数据
请求最多包含四部分,最少包含三部分。(也就是说第四部分可以为空)
第三部分永远都是一个回车(\n)
动词有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
这里的路径包括「查询参数」,但不包括「锚点」
如果你没有写路径,那么路径默认为 /
第 2 部分中的 Content-Type 标注了第 4 部分的格式
响应的格式
1 协议/版本号 状态码 状态解释
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下载的内容
格式跟请求的格式差不多。第3部门用于都是回车,第4部分就是服务器返给你的内容,内容的大小和类型,在第二部里面由说明。
状态码一般是要背的,常见的由下面几种
状态码要背,是服务器对浏览器说的话
1xx 不常用
2xx 表示成功
3xx 表示滚吧
4xx 表示你丫错了
5xx 表示好吧,我错了
用 Chrome 查看响应
打开 Network
输入网址
选中第一个响应
查看 Response Headers,点击「view source」,点击「view source」,点击「view source」
你会看到响应的前两部分
查看 Response 或者 Preview,你会看到响应的第 4 部分