上一篇结尾留了钩子:HTTP/2 把所有请求挤在一条 TCP 连接上,丢一个包卡住所有 stream。这个 TCP 层队头阻塞,HTTP/2 解决不了——因为它是 TCP 本身的有序交付机制造成的。
HTTP/3 的解法很激进:干脆不用 TCP,换成基于 UDP 的 QUIC。
为什么 HTTP/3 要换掉 TCP
TCP 自 1974 年诞生,是可靠传输的标杆。但它有两个 HTTP/2 时代暴露出来的问题:
第一,TCP 层队头阻塞。TCP 保证有序交付——丢包后,后续到达的包缓存住不能交上层,等重传。HTTP/1.1 时代一条连接一个请求,影响小;HTTP/2 多路复用后一条连接跑所有 stream,丢包卡住整条连接。
第二,握手开销叠加。建一条 HTTPS 连接要 TCP 握手(1 RTT)+ TLS 握手(1 RTT),这两层各握各的。TCP 不懂加密,TLS 不懂传输,两层割裂导致开销叠加。
QUIC(Quick UDP Internet Connections,Google 设计,RFC 9000)从底层重做,一举解决这两个问题。
QUIC 的三个核心改造
QUIC 基于 UDP,但自己在 UDP 之上重新实现了可靠传输、拥塞控制、加密。它的三个核心改造:
第一,stream 独立,丢包不连累。QUIC 把「有序」下沉到 stream 级别——每个 stream 内部有序,stream 之间互不阻塞。stream A 丢包只卡 stream A,stream B 照常交付。这彻底解决了 TCP 层队头阻塞。
第二,握手和加密合并(1 RTT 甚至 0 RTT)。TCP 不懂加密,所以要分两层握手。QUIC 从设计之初就内置 TLS 1.3,握手和密钥交换合并成一次。首次连接 1 RTT,恢复连接(有会话票据)0 RTT。比 TCP+TLS 的 2 RTT 少了一半。
第三,连接迁移。TCP 连接由「四元组」(源 IP、源端口、目标 IP、目标端口)标识。手机从 WiFi 切到 4G,IP 变了,TCP 连接就断了,要重建。QUIC 用一个「连接 ID」标识连接,不依赖 IP。WiFi 切 4G,连接 ID 不变,连接不断——这在移动场景下体验提升明显。
HTTP/3 = HTTP over QUIC
HTTP/3 的语义和 HTTP/2 一模一样(method、status、header、多路复用、头部压缩都一样),区别只在传输层:HTTP/2 跑在 TCP 上,HTTP/3 跑在 QUIC 上。
HTTP/2 栈: HTTP/3 栈:
HTTP/2 HTTP/3
HPACK QPACK(适配 stream 独立性)
TLS 1.3 (QUIC 内置 TLS)
TCP QUIC(基于 UDP)
UDP
IP IP
注意 HTTP/3 用的是 QPACK 而不是 HPACK。因为 QUIC 的 stream 独立性,HPACK 的动态表同步机制(依赖 stream 间的严格顺序)不适用,QPACK 做了适配——思路一脉相承,但处理乱序更鲁棒。
QUIC 的代价:UDP 被某些网络歧视
QUIC 不是没有代价。它基于 UDP,而 UDP 在某些网络环境下被歧视:
- 一些企业防火墙、旧路由默认丢弃 UDP 包(认为 UDP 不安全或用于 P2P)。
- 一些中间件只优化 TCP(硬件加速、负载均衡),对 UDP 支持差。
这导致 HTTP/3 在某些网络下反而连不上。所以现在主流做法是:先尝试 HTTP/3(QUIC),连不上快速回退到 HTTP/2(TCP)。浏览器和服务器通过 Alt-Svc 头协商「我支持 HTTP/3,可以试试」。
取舍与边界
HTTP/3 有几个值得注意的边界:
- HTTP/3 不是银弹。它解决了 TCP 层 HOL 和握手开销,但引入了 UDP 兼容性问题。在丢包率低、网络稳定的环境,HTTP/3 和 HTTP/2 差距不大;在移动网络、弱网环境,HTTP/3 优势明显。
- QUIC 在用户态实现。TCP 在操作系统内核里(成熟、优化深),QUIC 在用户态(应用层)实现,早期性能可能不如内核态 TCP。但随着优化,这个差距在缩小。
- 部署复杂度高。HTTP/3 需要 UDP 支持、QUIC 实现,比 HTTP/2 部署复杂。很多 CDN 现在支持 HTTP/3,自建要评估成本。
收束:HTTP/3 是传输层的彻底重构
HTTP/2 重做了 HTTP 的报文层(二进制帧、多路复用、HPACK),但还停在 TCP 上。HTTP/3 连传输层都重做了——用 QUIC 替代 TCP,解决 TCP 层队头阻塞、合并握手加密、支持连接迁移。这是 HTTP 演进里最激进的一步。
下一篇讲代理与网关——HTTP 请求从客户端到服务器,中间可能经过哪些中间节点,它们各自干什么。
关于十三Tech
我是十三,All in AI Agent 方向的架构师,专注 AI 工程实践。
我相信 AI 是程序员的最佳搭档,也希望帮助每一位开发者更好地驾驭 AI。
如果你想继续跟完这套「图解 HTTP」,欢迎关注公众号 「十三Tech」。后续会按 URL 与报文、连接与传输、缓存与协商、安全与边界、HTTP/2 与 HTTP/3 这条线更新。

