HTTP/1.1为每个请求打开一个新连接,或者复用少数几个连接,迫使浏览器为每个站点打开大约六个并行连接。每个连接都要单独握手,一个响应慢会阻塞后面的其他请求。网络之所以慢,是结构性的原因,而非技术性的。

谷歌的SPDY证明了解决方案:保持HTTP的方法、头和状态码完全不变,但将流量移到一个承载多个多路复用流的单一连接上。IETF采纳了这项工作,并将其标准化为RFC 7540中的HTTP/2,采用二进制分帧和HPACK头压缩。

由于语义保持相同,服务器和浏览器无需重新考虑HTTP请求的含义就能接纳它。传输层发生了变化,但契约未变,因此每个站点都免费获得了提速。

冻结HTTP的语义;在一个连接上运行多个流。

因为HTTP语义未动,现有服务器无需改变应用程序写响应的方式就能增加支持。

一个连接承载多个流消除了六个连接的瓶颈,也省去了每个资源都有的连接建立开销。

HPACK压缩了重复的头,因此相同的cookie和user-agent字段不会在每次请求中重复发送。

服务器推送允许服务器在客户端请求之前发送资产,省去了一次往返。

即使语义不变,保持兼容的传输层也能获胜;保持契约,更换管道。

RFC 7540于2015年5月定稿,并成为几乎所有HTTPS流量的默认协议。其遗留的主要问题是TCP队头阻塞,这直接导致了QUIC和HTTP/3的出现。HTTP/2还引发了请求走私和2023年发现的HTTP/2快速重置DoS模式。

从这里,追溯依据

参考来源

  1. RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2) IETF / RFC Editor · rfc-editor.org
  2. HTTP/2 Wikipedia · en.wikipedia.org