古老的HTTP/1
HTTP起源于1991年发明的HTTP/0.9。该协议最初是为一个更简单的电子文档Web而设计的,只能使用单一方法(GET)。这些用HTML编写的文档能够通过锚点标签链接到其他文档。HTTP/0.9协议能够很好的实现这一目标。
随着时间的推移,人们添加了两个具有额外功能和方法(例如提交表单数据的POST)的HTTP新实现。其版本号是v1.0好v1.1,他们在1996年标准化,从那时起,HTTP/1就成了Web的主力军。
然而接下来,随着Web技术的演进,Web从提供简单的HTML文档转变成提供复杂的网站和应用程序。这样,逐渐HTTP/1协议就不能满足要求了。
HTTP/1协议问题
HTTP/1协议有如下几个问题:
队首阻塞
HTTP/1协议无法同时处理超过一小批请求(通常一次处理6个请求)。请求按接收顺序响应,在初始批处理中所有请求完成之前,无法开始下载内容的新请求。
未压缩头部
使用HTTP/1协议时服务器只能压缩响应体,而不能压缩响应头。
不安全问题
HTTP/1协议使得服务器不需要为其访问者实现SSL。
HTTP/2协议
不再有队头阻塞
HTTP/2使用连接处理多个并行请求的方式来解决队头阻塞的问题。连接由以下层次结构中的组件构成:
-
流(stream)是服务器和浏览器之间的双向通信协议
单个流由对服务器的请求和来自服务器的响应组成。因为流是连续封装的,所以可以使用多个流,在同一连接中并行下载多个资源。 -
消息(message)由流封装
单个消息大致相当于对服务器的一个HTTP/1请求或来自服务器的一个响应,提供了请求资源和从Web服务器接收资源内容所需的机制。 -
帧(frame)由消息封装
帧是消息中的分隔符,表明后面的数据类型。例如,响应消息中的HEADERS帧表明以下数据表示响应的HTTP头。响应消息中的DATA帧表明是请求资源的内容。
头部压缩
HTTP/2引入了一个名为HPACK的压缩算法来解决这个问题。HPACK不仅压缩头部数据,还通过创建一个表来存储重复头部,以删除多余头部。
确保HTTPS
支持HTTP/2的浏览器实际上要求通过HTTP/2进行的任何通信都必须是安全的。
参考资料
[1] 《Web性能实战》