Skip to content

模块导航: 总入口 · 总纲与方法 · 后端场景 · AI与算法工程 · 国企与金融 · 网络问答


10. HTTP/1.1 → HTTP/2 → HTTP/3 的演进(热度 297 / 284 · 进阶) ​

Q: HTTP/2 相比 1.1 有哪些改进?HTTP/3 为什么改用 UDP?

A:

HTTP/1.1 的限制 ​

持久连接(keep-alive 默认)+ 管线化(实践中少用);同一连接上请求/响应串行,存在应用层队头阻塞;浏览器对同域名开多条 TCP(如 6 条)缓解;头部冗余。雪碧图、域名分片等优化本质是在绕协议限制。

HTTP/2(基于 TCP) ​

① 二进制分帧;② 多路复用(一条连接并发 stream,流 ID 区分);③ 头部压缩 HPACK;④ 服务器推送(实践支持度下降)。

仍存在 TCP 层队头阻塞: 任一 TCP 段丢失,后续字节必须重传等待,所有 HTTP/2 流一起被阻塞。

HTTP/3(基于 QUIC/UDP) ​

可靠性与流控下移到 QUIC,按流独立,彻底解决传输层队头阻塞;0-RTT/1-RTT 建连(与 TLS1.3 融合);连接迁移(CID 标识连接,换网不断);用户态协议栈迭代更快。

层次差异:HTTP/2 解决应用层队头阻塞;HTTP/3 才解决传输层队头阻塞。

为何在 UDP 上自研: TCP 在内核、中间设备干扰多、OS 更新慢;UDP 443 已广泛放行,部署可行。HTTP 语义(方法/状态码/头部)保持不变以降低迁移成本。

常见追问 ​

追问 1:HTTP/2 解决了队头阻塞,为什么还不够?

  • 答题要点: HTTP/2 多路复用只在应用层把请求交织到一条 TCP;TCP 仍保证单一有序字节流,底层丢包时所有流共命运。要按流独立重传/交付,需要 QUIC 那样的流层可靠性。

追问 2:HTTP/3 为什么用 UDP,而不是向 IP 层申请一个新的协议号?

  • 答题要点: 新 IP 协议号中间设备兼容性差、防火墙/NAT 易丢弃;更关键的是 QUIC 在用户态把可靠传输与 TLS 1.3 加密合为一体、可随应用快速迭代,本就不依赖 IP 协议号来定义自己——UDP 只是它穿透中间设备的载体,包头显式声明 QUIC 版本与 Connection ID。加上 UDP 443 早已广泛放行,部署可行。

追问 3:如何知道服务器是否支持 HTTP/2 或 HTTP/3?

  • 答题要点: curl -I --http2 https://example.com 或看响应头 alt-svc: h3=":443"; ma=...;Wireshark 看 TLS ALPN 协商(TCP 上只会是 h2/http/1.1;h3 走 QUIC,抓包看 alt-svc 与 QUIC Initial);Chrome 开发者工具 Protocol 列。

易错点 ​

易错说法纠正
「HTTP/2 底层是 UDP」HTTP/2 基于 TCP;TLS 非协议层面强制(h2c 与明文 prior-knowledge 允许明文模式),但浏览器与主流服务器只实现 TLS 之上的 h2,实际部署恒为 TLS
「HTTP/2 已无队头阻塞」应用层队头阻塞解决,TCP 层仍在
「HTTP/3 只是 HTTP/2 换端口」传输层变成 QUIC/UDP,多路与握手模型都变了
「keep-alive 是 HTTP/2 多路复用」keep-alive 只是复用连接;多路复用是并发交错的流
「HPACK 可有可无」头部压缩是 HTTP/2 正式特性,对性能很重要

与选择题对照 ​

  • 主库 150: 第 92 题(1.1/2/3 正确叙述)、第 84 题(HTTP 特点)、第 145 题(keep-alive)、第 91 题(HTTPS/端口)、第 65 题(HTTP/3 相关 UDP 应用思路)。
  • 补题 16: 补-13(UDP 相关,支撑 HTTP/3 底层)。
  • 口述联动: 选择题可能考「谁基于 UDP/谁有多路复用」;面试必须能分层讲「应用层队头阻塞 vs 传输层队头阻塞」。

工程 / 抓包背景 ​

  • curl: curl --http2 -I、curl --http3 -I(构建支持时)。
  • Nginx: HTTP/2 在 Nginx ≤1.24 写 listen 443 ssl http2;,1.25.1 起该参数被标记 deprecated(官方文档至今只说"已废弃、应改用 http2 指令",并未声明在任何版本移除,旧写法仍可解析),新配置应写成 listen 443 ssl; + http2 on;;HTTP/3 需 quic 指令与 Alt-Svc 头。
  • Wireshark: ALPN 显示 h2;HTTP/3 是 QUIC 加密,可用密钥日志(SSLKEYLOGFILE)解密部分信息。
  • 浏览器: Network → Protocol 列显示 h2/h3。
  • 运维注意: 升级 HTTP/2 后单连接放大,需调 worker_connections、关注 TCP 缓冲与队头阻塞相关时延。

持续学习,持续积累。