HTTP/2 与 HTTP/3 协议详解

二进制分帧、HPACK/QPACK、多路复用与 QUIC——逐项拆解 HTTP/2 与 HTTP/3 相对 1.1 改了什么。

作者 David更新于

本专栏只回答一个问题:HTTP/2 与 HTTP/3 相对 HTTP/1.1 具体改了什么,怎么改的,代价是什么。

前提:《HTTP/1.1 协议详解》。本专栏默认你已知道 1.1 的报文语法与字段语义,不再重复。

一句话概括

  • HTTP/2 换掉了 1.1 的报文成帧层——文本行改二进制帧,一条连接上多路复用多个请求,头部用 HPACK 压缩。语义完全不变。
  • HTTP/3 换掉了 HTTP/2 的传输层——TCP 改 QUIC(跑在 UDP 上),消除 TCP 层的队头阻塞,握手从 2–3 RTT 降到 1 RTT(复访 0 RTT)。

三个版本的语义是同一套:方法、状态码、字段含义、条件请求、缓存、认证全部沿用 RFC 9110。变的只有「字节怎么排」与「跑在什么之上」。

规范基准

规范RFC年份
HTTP 语义(三版共用)91102022
HTTP/29113(废止 7540)2022
HPACK(h2 头压缩)75412015
HTTP/391142022
QPACK(h3 头压缩)92042022
QUIC 传输 / TLS / 恢复9000 / 9001 / 90022021
可扩展优先级92182022

1.1 的四个瓶颈

后面每一章都在解决其中之一:

瓶颈1.1 的表现解法
队头阻塞(应用层)流水线中一个慢响应堵住其后全部h2 多路复用
队头阻塞(传输层)一个 TCP 包丢失,其后所有数据等重传h3 QUIC 流
头部冗余每请求重发全部字段,明文数百字节h2 HPACK / h3 QPACK
连接数爆炸浏览器每域开 6 条连接绕开阻塞单连接多路复用

阅读顺序

第 1 部分 · HTTP/2——总览、二进制分帧、流与多路复用、HPACK、伪头字段、流量控制、SETTINGS 与优先级、连接管理、服务端推送。

第 2 部分 · HTTP/3 与 QUIC——总览、QUIC 传输层、帧格式、QPACK、连接与发现。

第 3 部分 · 对照与迁移——三版全面对照、迁移注意事项。

从 HTTP/2 总览 开始。

本页目录