三版全面对照
1.1 / 2 / 3 在成帧、多路复用、压缩、连接管理与安全上的逐项差异表。
作者 David·更新于 ·第 15 篇(共 16 篇)
| 层 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|
| 语义(方法/状态码/字段) | RFC 9110 | RFC 9110 | RFC 9110 |
| 成帧 | RFC 9112 | RFC 9113 | RFC 9114 |
| 头部压缩 | 无 | HPACK (7541) | QPACK (9204) |
| 传输 | TCP | TCP | QUIC (9000) / UDP |
| 加密 | TLS 可选 | TLS 事实必需 | TLS 1.3 内建强制 |
| 项 | 1.1 | 2 | 3 |
|---|
| 编码 | 文本,CRLF 分行 | 二进制帧 | 二进制帧 |
| 帧头 | 无 | 固定 9 字节 | 变长,通常 2 字节 |
| 起始行 | GET / HTTP/1.1 | 伪头 :method :path | 同 h2 |
Host | 必需字段 | :authority | :authority |
| 字段名大小写 | 不敏感 | 强制小写 | 强制小写 |
| 体的定界 | Content-Length / chunked | 帧长 + END_STREAM | 帧长 + QUIC FIN |
Transfer-Encoding | 有 | 禁用 | 禁用 |
chunked | 有 | 无 | 无 |
| trailer | 分块尾区 | 末尾 HEADERS 帧 | 末尾 HEADERS 帧 |
reason-phrase | 有 | 删除 | 删除 |
| 请求走私风险 | 高(靠扫描定界) | 低(长度前置) | 低 |
| 项 | 1.1 | 2 | 3 |
|---|
| 并发方式 | 多条 TCP 连接(浏览器每域 6) | 单连接多流 | 单连接多流 |
| 流标识 | 无 | 31 位流 ID | 62 位 QUIC 流 ID |
| 响应顺序 | 必须与请求同序 | 任意 | 任意 |
| HTTP 层队头阻塞 | 有 | 无 | 无 |
| 传输层队头阻塞 | 有(每连接独立) | 有(全部流共享) | 无 |
| 取消单个请求 | 不能(只能断连接) | RST_STREAM | QUIC RESET_STREAM |
| 域名分片 | 有效优化 | 反模式 | 反模式 |
| 项 | 1.1 | 2 | 3 |
|---|
| 机制 | 无(明文全量重发) | HPACK | QPACK |
| 静态表 | — | 61 项 | 99 项 |
| 动态表 | — | 有,默认 4096 字节 | 有,默认容量 0(禁用) |
| 字符串编码 | — | Huffman(可选) | Huffman(同表) |
| 乱序容忍 | — | 不容忍 | 容忍(RIC + 阻塞流) |
| 典型头部字节 | ~700 | ~10–30(复用后) | ~10–30 |
| 失步后果 | — | COMPRESSION_ERROR 杀连接 | QPACK_DECOMPRESSION_FAILED 杀连接 |
| 项 | 1.1 | 2 | 3 |
|---|
| 持久连接 | 默认(Connection: close 关闭) | 恒持久 | 恒持久 |
| 协议协商 | Upgrade 字段 | ALPN(h2) | ALPN(h3)+ Alt-Svc / DNS HTTPS |
| 参数协商 | 无 | SETTINGS + ACK,可重发 | 控制流首帧 SETTINGS,不可重发 |
| 保活 | Keep-Alive(提示) | h2 PING | QUIC PING |
| 优雅关闭 | Connection: close | GOAWAY + Last-Stream-ID | GOAWAY(双向语义) |
| 「未处理」保证 | 无 | REFUSED_STREAM | H3_REQUEST_REJECTED |
| 逐跳字段 | Connection 列出 | 概念取消 | 概念取消 |
| 握手 RTT | TCP 1 + TLS 1–2 | 同 1.1 | 1(复访 0) |
| 换网络 | 断连 | 断连 | 连接迁移,不断 |
| 项 | 1.1 | 2 | 3 |
|---|
| 流量控制 | 靠 TCP | HTTP 层两级窗口 + TCP | QUIC 两级(无 HTTP 层) |
| 窗口更新 | — | WINDOW_UPDATE(增量) | QUIC MAX_DATA(绝对值) |
| 默认窗口 | — | 65535(常需调大) | QUIC 传输参数 |
| 优先级 | 无 | 依赖树(已废弃) | 无内建 |
| 现行优先级方案 | — | RFC 9218 priority 字段 | RFC 9218(同一套) |
| 特性 | 状态 |
|---|
| HTTP/1.1 流水线 | 浏览器默认禁用 |
h2c 明文升级(Upgrade: h2c) | RFC 9113 废弃 |
HTTP2-Settings 字段 | RFC 9113 废弃 |
h2 优先级树 / PRIORITY 帧 | RFC 9113 废弃 |
| 服务端推送(h2 与 h3) | 浏览器已移除支持 |
Warning 字段 | RFC 9111 移除 |
Accept-Charset | RFC 9110 废弃 |
305 Use Proxy | 废弃 |
| 场景 | 建议 |
|---|
| 公网站点 | h3 + h2 并存,1.1 兜底 |
| 移动端占比高 | h3 收益最大(连接迁移 + 弱网抗丢包) |
| 内网服务间(低丢包、高带宽) | h2 足够;h3 的 CPU 开销未必划算 |
| gRPC | h2(生态标准),h3 支持在推进中 |
| 简单 API、低并发 | 1.1 完全够用,别为协议而协议 |
| 大文件单流下载 | 三者差异小,瓶颈在拥塞控制而非协议 |
下一篇:迁移注意事项。