为什么需要 HTTP/3?
HTTP/2 已经解决了 HTTP/1.1 的队头阻塞问题(Head-of-Line Blocking),但仍遗留一个根本性瓶颈:TCP 层的队头阻塞。
HTTP/2 在单条 TCP 连接上复用多个流(stream),但一旦某个 TCP 数据包丢失,所有流都必须等待该包重传,即便其他流的数据已经就绪。
QUIC 的解决思路
QUIC(Quick UDP Internet Connections)是 Google 设计、IETF 标准化的传输层协议,运行在 UDP 之上。它在传输层实现了流的独立性:
- 独立流:每条流的丢包只阻塞该流本身,其他流不受影响
- 连接迁移:使用连接 ID(Connection ID)而非四元组标识连接,网络切换(如 Wi-Fi → 4G)时连接不中断
- 0-RTT / 1-RTT 握手:内置 TLS 1.3,首次握手 1-RTT,再次连接可达 0-RTT
HTTP/3 = HTTP over QUIC
HTTP/3 将 HTTP 语义直接映射到 QUIC 流,彻底消除了 TCP 层的队头阻塞。主要变化:
| HTTP/2 | HTTP/3 | |
|---|---|---|
| 传输层 | TCP | QUIC (UDP) |
| TLS | TLS 1.2/1.3 (独立) | TLS 1.3 (内置) |
| 队头阻塞 | 存在(TCP 层) | 消除 |
| 连接迁移 | 不支持 | 支持 |
部署现状
主流浏览器(Chrome、Firefox、Safari)已全面支持 HTTP/3。Cloudflare、Google、Facebook 等 CDN 和大型平台已广泛部署。
检测方式:
curl --http3 -I https://cloudflare.com
响应头中 alt-svc: h3=":443" 表示服务端支持 HTTP/3。
小结
HTTP/3 不是对 HTTP/2 的小修补,而是从传输层开始的重新设计。对于高丢包率环境(移动网络、卫星网络)收益尤为显著。