什么是 HTTP/3?
HTTP/3 是 HTTP 的第三个主要版本,使用 QUIC 作为传输协议而不是 TCP。它消除了队头阻塞,降低连接建立延迟,并改善不可靠网络中的性能。HTTP/3 与 HTTP/2 对比
| 特性 | HTTP/2 | HTTP/3 |
|---|---|---|
| 传输协议 | TCP | QUIC(基于 UDP) |
| TLS | 独立层 | 集成在 QUIC 中 |
| 握手 | TCP + TLS(2-3 RTT) | 0-1 RTT |
| 队头阻塞 | 存在于 TCP 层 | 已消除 |
| 连接迁移 | 不支持 | 支持 |
| 丢包影响 | 阻塞所有流 | 仅影响对应流 |
HTTP/3 如何工作
HTTP/2 over TCP:
Client Server
│─────────── SYN ────────────►│
│◄────────── SYN-ACK ─────────│
│─────────── ACK ────────────►│ TCP Handshake
│─────────── ClientHello ────►│
│◄────────── ServerHello ─────│ TLS Handshake
│─────────── Finished ───────►│
│◄────────── Finished ────────│
│─────────── HTTP Request ───►│ (3 RTT minimum)
HTTP/3 over QUIC:
Client Server
│─────── Initial + ClientHello ─►│
│◄────── Initial + ServerHello ──│
│─────── HTTP Request ──────────►│ (1 RTT)
With 0-RTT Resumption:
│─────── 0-RTT + HTTP Request ──►│ (0 RTT!)
QUIC 协议特性
| 特性 | 优势 |
|---|---|
| 基于 UDP | 避免 TCP 队头阻塞 |
| 集成 TLS 1.3 | 始终加密,握手更快 |
| 连接 ID | 可跨 IP 地址变化保持连接 |
| 流多路复用 | 独立传输各个流 |
| 前向纠错 | 减少重传需求 |
连接迁移
Mobile Network Switch (HTTP/2):
WiFi ──► Connection drops ──► New TCP connection ──► Start over
Mobile Network Switch (HTTP/3):
WiFi ──► Switch to cellular ──► Same QUIC connection continues
(Connection ID persists across IP changes)
采用情况
| 平台 | HTTP/3 支持 |
|---|---|
| Chrome | 87+ (2020) |
| Firefox | 88+ (2021) |
| Safari | 14+ (2020) |
| Edge | 87+ (2020) |
| Cloudflare | 完整支持 |
| AWS CloudFront | 完整支持 |
| nginx | 1.25.0+(实验性) |
性能改进
- 高延迟网络:页面加载速度最高提升 50%
- 有损连接:单个数据包丢失不会阻塞全部流
- 移动网络:WiFi 与蜂窝网络切换时连接仍可保持
- 首次连接:1-RTT 建立时间优于 3-RTT
最佳实践
1. 与 HTTP/2 一起部署:浏览器可以平滑回退
2. 使用 Alt-Svc 标头:公布 HTTP/3 可用性
3. 正确配置 UDP:确保防火墙允许 QUIC 流量
4. 监控性能:比较不同协议版本的指标
5. 测试移动场景:HTTP/3 在蜂窝网络中优势明显
服务器配置示例
# Alt-Svc header to advertise HTTP/3
Alt-Svc: h3=":443"; ma=86400
HTTP/3 代表 Web 传输的发展方向,尤其能为移动网络和高延迟网络用户提供更快、更可靠的连接。