# 三版全面对照

> 1.1 / 2 / 3 在成帧、多路复用、压缩、连接管理与安全上的逐项差异表。

- 作者：David（道雾轩）
- 专栏：HTTP/2 与 HTTP/3 协议详解（https://daiw.org/manual/http2-3.md）
- 最后更新：2026-07-26
- 原文：https://daiw.org/manual/http2-3/version-comparison
- 转载与引用：请注明出处并附原文链接（https://daiw.org/about/copyright）

## 分层归属

| 层 | 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 完全够用，别为协议而协议 |
| 大文件单流下载 | 三者差异小，瓶颈在拥塞控制而非协议 |

下一篇：[迁移注意事项](https://daiw.org/manual/http2-3/migration-notes)。
