HTTP/1.1、HTTP/2和HTTP/3的区别是什么

每次打开网页背后都在用的HTTP协议,实际上已经经历了三次重大的架构升级。

HTTP/1.1让一个连接可以重复使用

在此之前每发一个请求都要新建一次TCP连接,HTTP/1.1标准化了"持久连接"(Keep-Alive),让同一个连接可以连续处理多个请求。

但同一个连接内请求仍然要排队

一个连接内的请求基本上按顺序处理,浏览器因此常常对同一个域名同时打开多个连接(通常是6个左右)来实现并行加载。

HTTP/2在单个连接内实现了多路复用

2015年发布的HTTP/2把请求和响应拆分成二进制"帧",让多组请求和响应可以在同一条TCP连接上交错传输,不再需要靠多个连接来并行。

头部压缩等优化也一并引入

HTTP/2引入了HPACK头部压缩技术,减少了每次请求中大量重复的头部信息所占用的带宽。

HTTP/2仍然遗留了一个弱点

由于底层仍然是TCP,一旦有一个数据包丢失,在它被重新传输之前,同一条连接上的其他数据流也会被一起卡住,这就是TCP层面的队头阻塞问题。

HTTP/3换用了名为QUIC的新传输层

2022年标准化的HTTP/3不再基于TCP,而是采用建立在UDP之上的QUIC协议,这样即使某个数据包丢失,受影响的也只是它所在的那一条数据流,而不是整个连接。

连接建立和加密方面也更有优势

QUIC默认内置了TLS加密,并支持在重新连接时用更少的往返次数完成握手,这一点在移动网络环境下的优势尤其明显。

每次升级都对应着当时最迫切的问题

HTTP/1.1解决的是连接反复建立的开销问题,HTTP/2解决的是网页资源数量暴增之后的连接开销问题,HTTP/3解决的则是移动网络下丢包导致TCP重传延迟的问题——三次升级都精准对应着各自时代最痛的那个瓶颈。

普通用户几乎不需要主动选择协议版本

大多数浏览器和服务器会在建立连接时自动协商双方都支持的最新协议版本,所以同一次浏览过程中,不同网站背后用的可能是HTTP/2也可能是HTTP/3,用户通常完全不需要手动设置。

常见问题

要用上HTTP/2或HTTP/3需要自己设置什么吗?

一般不需要。浏览器和服务器会在连接握手阶段自动协商可用的最新版本,如果服务器不支持新版本,会自动回退到旧版本,用户几乎感觉不到差异。

HTTP/3是不是永远比HTTP/2快?

在不稳定或高延迟的网络(比如移动网络)下通常明显更快,但在稳定的高速有线连接下,HTTP/2的TCP队头阻塞问题本来就很少被触发,实际体感差异可能不大。