HTTP的演变

1、1990年万维网,在现有的TCP和IP协议基础之上建立,它由四个部分组成:

1.1、一个用来表示超文本文档的文本格式,超文本标记语言(HTML)

1.2、一个用来交换超文本文档的简单协议,超文本传输协议(HTTP)

1.3、一个显示超文本文档的客户端,即网络浏览器

2、HTTP/0.9-单行协议

请求由单行指令构成,以唯一可用方法GET开头,其后跟目标资源的路径

GET /mypage.html

响应也极其简单的:只包含响应文档本身

<HTML>
这是一个非常简单的HTML页面
</HTML>

不包含HTTP响应头,只有HTML文件可以传输,无法传输其他类型的文件,也没有状态码和错误码,一旦出现问题,一个错误的包含问题信息的HTML文件将被发回,供人们查看

3、HTTP/1.0-构建可扩展性

3.1、协议版本信息会随着每个请求发送

3.2、状态码会在响应开始时发送

3.3、引入了HTTP头的概念

3.4、具备了传输除纯文本HTML文件以外其他类型文档的能力

典型请求:

GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML> 
一个包含图片的页面
  <IMG SRC="/myimage.gif">
</HTML>

第二个链接,请求获取图片:

GET /myimage.gif HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

200 OK
Date: Tue, 15 Nov 1994 08:12:32 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/gif
(这里是图片内容)

4、HTTP/1.1-标准化的协议

4.1、连接可以复用,节省了多次打开TCP连接加载网页文档资源的时间

4.2、增加流水线操作,允许第一个应答被完全发送之前就发送第二个请求,以降低通信延迟

4.3、支持响应分块

4.4、引入额外的缓存控制机制

4.5、引入内容协商机制,包括语言,编码,类型,并允许客户端和服务器之间约定以合适的内容进行交换

4.6、host头能够使不同域名配置在同一个IP地址的服务器上

一个典型的请求流程,所有的请求都通过一个连接实现:

GET /en-US/docs/Glossary/Simple_header HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header

200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 20 Jul 2016 10:55:30 GMT
Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a"
Keep-Alive: timeout=5, max=1000
Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT
Server: Apache
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding

(content)


GET /static/img/header-background.png HTTP/1.1
Host: developer.cdn.mozilla.net
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header

200 OK
Age: 9578461
Cache-Control: public, max-age=315360000
Connection: keep-alive
Content-Length: 3077
Content-Type: image/png
Date: Thu, 31 Mar 2016 13:34:46 GMT
Last-Modified: Wed, 21 Oct 2015 18:27:50 GMT
Server: Apache

(image content of 3077 bytes)

 5、HTTP/2

5.1、二进制协议而不是文本协议,不再可读,也不可无障碍的手动创建,改善的优化技术现在可被实施

5.2、这是一个复用协议,并行的请求能在同一个链接中处理,移除了HTTP/1中顺序和阻塞的约束

5.3、压缩了headers,移除了重复和传输重复数据的成本

5.4、允许服务器在客户端缓存中填充数据,通过服务器推送的机制来提前请求

发布了47 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u013009576/article/details/100880860