HTTP/2 与 HTTP/3 演进

HTTP/2 引入多路复用与头部压缩,改善并发传输效率;HTTP/3 基于 QUIC 把传输层的队头阻塞进一步消解,弱网与移动场景收益更明显。

HTTP/2 与 HTTP/3 的差别

HTTP/2 在一条 TCP 连接上引入多路复用与头部压缩,浏览器不再需要为并发开六条连接,资源加载效率明显提升;但底层仍是 TCP,一个丢包会阻塞该连接上的所有流(传输层队头阻塞)。HTTP/3 把传输层换成基于 UDP 的 QUIC:丢包只影响相关流,还支持连接迁移(切换网络不重建连接),弱网与移动场景收益更明显。升级后仍需复测,因为多路复用会把更多流压到同一条连接上,相互影响的方式变了。

基本信息

HTTP/2二进制分帧、多路复用、头部压缩(HPACK),运行在 TCP 之上
HTTP/3运行在 QUIC(基于 UDP)之上,支持连接迁移与独立流
部署前提HTTP/2 需 TLS 协商(ALPN);HTTP/3 需客户端与边缘设备支持
观测影响多路复用降低连接数,单连接承载更多流,慢流会互相影响

典型使用场景

  • 前端资源密集页面:合并域名与连接数,减少握手与队头阻塞
  • 移动端与弱网:HTTP/3 在丢包与网络切换场景下表现更稳
  • API 网关:gRPC 基于 HTTP/2 的多路复用承载高频小请求
  • 长连接推送:复用同一连接承载大量流,减少连接维护成本
  • 跨地域访问:减少握手的往返次数,缩短首字节时间

版本

版本关键特性注意
HTTP/1.1持久连接、管道化(较少使用)并发靠多连接
HTTP/2多路复用、头部压缩TCP 层队头阻塞仍在
HTTP/3QUIC、UDP 传输、连接迁移需要边缘与客户端支持

压测与验证要点

压测与验证要点
# 1. 确认协议协商生效
curl -I --http2 https://example.com/    # 观察响应里的 HTTP/2
# 2. 复测关键指标:首字节时间、资源加载完成时间、P99 延迟
# 3. 关注单连接多流下的相互影响:慢接口是否拖慢同连接的其他请求
# 4. 服务器侧并发流上限与超时配置要与流量特征匹配
# 注意:UDP 可能被中间设备限速或拦截,HTTP/3 需要回退到 HTTP/2 的能力

使用要点

  • 升级协议后要复测:多路复用下单连接承载更多流,慢流会互相影响,需观察 P99
  • 保留回退能力:HTTP/3 依赖 UDP 可达性,边缘设备或网络拦截时需要能退回 HTTP/2
  • 服务端并发流上限要按流量特征调整:上限过低会排队,过高会让单连接承担过多负载
  • 头部压缩对重复头收益大:减少自定义头数量、保持头顺序稳定有助于压缩效率
  • 压测工具与环境要支持新协议,否则测出来的是旧协议下的容量
升级协议后要复测:多路复用下单连接承载更多流,慢流会互相影响,需观察 P99,旧的按连接数估算容量的方法不再适用。
HTTP/3 走 UDP,部分企业网络、防火墙与中间设备会限速或直接拦截:上线必须保留协议回退机制,否则可能出现部分用户完全不可用的分区故障。

易错点

  • 仅按 HTTP/1.1 压测判断容量,忽略多路复用特性,上线后容量结论不成立
  • 未验证客户端与网关兼容性就全面启用 HTTP/3,部分网络下请求直接失败
  • 服务端并发流上限沿用默认值,与流量特征不匹配,出现排队或资源争抢
  • 把 HTTP/2 当成 HTTP/1.1 的加速版:仍在页面上维护大量域名分片,浪费多路复用优势
  • 忽略慢流的相互影响,单个慢接口拖慢同连接上的其他请求,整体 P99 劣化

数据来源与参考

  • RFC 9113:HTTP/2
  • RFC 9114:HTTP/3
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌