HTTP版本演进:第一回
本系列文章,严重参考《高性能浏览器网络》和《HTTP权威指南》
前言:
http的设计思路,起源于20世纪三十年代的一篇文章:《As we may think》,作者美国MIT工程学院的电子工程师Vannevar Bush,该文尝试探讨了人们每天生产的信息量和社会消化信息的能力。一句话总结:信息太多,别说消化了,查找都费劲。得设计一个更牛叉的东西,帮助我们提高效率。这就是http超文本概念的起源,超越文本的信息存在。虽然概念的正式提出得30多年之后但是,在此还是由衷的对这些仰望星空的前辈们致敬。
http和https:http就是超文本传输协议,所谓的协议就是一种约定,约定了在双方或者多方之间传输的数据的格式,仅此而已。这是1991年万维网之父伯纳斯李同学提出并设计的一套协议。主要目的就是机器之间能够互传资源,实现网络互联的真实需求。请求与响应。即:客户端向服务器发送资源请求,服务器端响应返回对应资源。https则是在http之外,又包了一层SSL,也就是安全套接层,用于加密传输,保证数据的可靠性。
总体划分四个版本:0.9、1.0、1.1和2.0
0.9版本
该版本可以视为初代机,只有一个目标:机器之间实现通信。只支持get请求,ascii码字符流传输。没有请求头响应头,没有MIME类型。说白了,就是只有文本,其他啥都没有。流程:tcp三次握手建立链路,发送请求,获取响应,断开连接。待前一个请求响应返回之后,发起第二个请求,过程周而复始。
telnet google.com 80
Connection to xxx.xxx.xxx.xxx
GET /about/
HTML response...
connection closed
1.0版本
相较于0.9版本,除get请求,新增了post、put等其他方式。同时有了首部、状态码的概念,有了重定向、压缩等的功能加持。有了MIME类型,支持多媒体资源传输。那么从1.0开始,http严格意义上应该称之为HMTP(hypermedia transport)。请求响应流程还是0.9那一套。
注:MIME是一种文本标记,标识了传输资源的类型,常见的如text/plain、text/html、image/jpeg等。规则:对象类型/特定子类型
1.1版本
同前两个版本比较,1.1版本的改进:
长连接connection:keep-alive。这就意味着,多个请求可以共用一条链路(在不主动断开连接的情况下)。假设页面需要发送n次请求,在以前的版本中,耗时n * rtt(往返耗时)。现在只需要1 * rtt数据切分成块乱序传输,响应按照请求的顺序返回。- 新增
cache-control缓存资源,特定的资源无需发送请求。
-管道化。请求无需等待并行发送。
2.0版本
http2.0的设计初衷只有一个,就是提高传输性能,包括低延时和高吞吐量。二进制分帧,将数据块分成更小的数据帧。多路复用,响应并行交错返回。头部压缩、主动推送…详细介绍见后续文章
