EN
返回档案库

案例库 · 软件与 IT · 技术决策 · 2009-2015

HTTP/2保持了HTTP语义,但将一个连接上的多个流多路复用

HTTP/2在一个TLS连接上增加了二进制分帧和多路复用,并且在没有改变HTTP意义的情况下无缝部署。

Google · IETF

那一手

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

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

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

为什么管用

  • 因为HTTP语义未动,现有服务器无需改变应用程序写响应的方式就能增加支持。
  • 一个连接承载多个流消除了六个连接的瓶颈,也省去了每个资源都有的连接建立开销。
  • HPACK压缩了重复的头,因此相同的cookie和user-agent字段不会在每次请求中重复发送。
  • 服务器推送允许服务器在客户端请求之前发送资产,省去了一次往返。
值了多少冻结HTTP的语义;在一个连接上运行多个流。聪明

可以搬走什么

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

后来呢

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

资料来源

发现哪里写错了?告诉我们。

同一路聪明