HTTP/2 与 HTTP/3 实战:协议升级到底快在哪里
升级了 HTTP/2 却没变快?换了 HTTP/3 也没感觉?协议优化的收益完全取决于瓶颈在哪。这篇讲清三代协议的排队与握手机制、收益何时明显、怎么开启与验证,以及五个常见误区。
一、三代协议:差别在哪三件事上
「我们升级了 HTTP/2,怎么没变快?」——这个问题之所以常见,是因为协议升级的收益并不普适:它优化的是连接内的并发与握手延迟,如果你的瓶颈在服务端计算或数据库,升到 HTTP/3 也不会快。
| 版本 | 传输层 | 并发方式 | 队头阻塞 | 握手 |
|---|---|---|---|---|
| HTTP/1.1 | TCP | 一连接一请求,靠多连接并发 | 有(应用层) | TCP + TLS 分开 |
| HTTP/2 | TCP | 单连接多路复用 | 有(传输层) | TCP + TLS 分开 |
| HTTP/3 | QUIC(基于 UDP) | 流之间完全独立 | 基本消除 | 与加密合并,可 0-RTT 恢复 |
三件事值得记牢:HTTP/2 带来了二进制分帧、多路复用与头部压缩;HTTP/3 换掉了传输协议——用 QUIC 把"流"从 TCP 的整体里拆出来,顺带把握手与加密合并;服务端推送(Server Push)在实践中效果不佳,已基本退出历史舞台,听到"用推送优化"要谨慎。
HTTP/2 是把多条车道塞进一条隧道;HTTP/3 是让每条流各自独立——隧道塌方时区别就出来了。
二、队头阻塞:两层含义
- 应用层(HTTP/1.1):同一连接上前一个响应没回来,后面的请求只能等着——浏览器只能靠开 6 个并发连接来绕
- 传输层(HTTP/2 over TCP):一个 TCP 报文丢了,所有复用的流都要等它重传——这就是 H2 在多路复用下的新瓶颈
- HTTP/3 的解法:QUIC 让每条流独立重传,一条流的丢失不再拖住其他流;丢包率越高的网络,收益越明显
三、握手:省下来的都是 RTT
| 场景 | 大致需要的往返 | 说明 |
|---|---|---|
| HTTP/1.1 或 2 + TLS 1.2 | 多次往返 | TCP 握手与 TLS 握手先后进行 |
| 同上 + TLS 1.3 | 约 1 次(复用可 0-RTT) | 0-RTT 有重放风险,敏感操作慎用 |
| HTTP/3(QUIC) | 新建约 1 次,恢复可 0-RTT | 握手与加密合并,连接迁移不重握手 |
在高延迟链路上,一次往返可能就是几十到几百毫秒——这就是为什么移动网络与跨国访问对"少一次握手"格外敏感。
四、收益什么时候明显
- 收益大的场景:高延迟链路(移动网、跨国)、首屏要加载很多小资源、丢包率较高的网络
- 收益小的场景:单一大文件下载(并发与握手都不敏感)、内网低延迟、服务端本身就慢
- 前提条件:HTTP/3 走 UDP,部分企业网络与运营商会对 UDP 限速甚至封禁——必须有自动回退
一句判断标准:先测 TTFB 与 LCP,再决定要不要折腾协议。如果 TTFB 本身就很高(服务端慢),协议升级救不了你;如果首屏是"很多小文件 + 高延迟网络",协议收益才会立刻显现。
五、开启与验证
开启路径通常是:HTTP/2 在主流服务器与 CDN 上基本是默认能力;HTTP/3 需要在 CDN 或网关侧显式开启,并保证 443/UDP 可达,同时配置自动回退(H3 不可用时回落 H2/1.1,一般通过 Alt-Svc 通告)。验证则用两条命令起步:
curl -sI --http2 https://example.com/ -o /dev/null -w '%{http_version}\n'
curl -sI --http3 https://example.com/ -o /dev/null -w '%{http_version}\n'
# 浏览器里看 DevTools → Network → Protocol 列(h2 / h3)
两个调优提醒:一是别再用服务端推送(收益不佳、复杂度高);二是重新审视过度打包——HTTP/1.1 时代为了减少请求数把所有 JS 打成一个巨型文件,而在多路复用下,拆成合理粒度的按需加载往往更快、缓存命中更好。
六、五个常见误区
- 「升级 H2 就一定快」:瓶颈若在服务端或数据库,协议换了也没用
- 「HTTP/3 全面替代 H2」:UDP 可能被限速,必须保留回退路径,并分地域验证
- 只看协议不看内容:压缩、图片格式、缓存策略对体感的影响通常更大
- 忽略 TTFB 与连接建立耗时:这两个才是协议的"主战场",不看它们就无从判断收益
- 不做基线就宣布成功:没有升级前的 P75 数据,任何"感觉更快"都不可信
七、落地路线:四步走
- 第一步 · 测基线:记录 TTFB、LCP、连接建立时间的 P75/P95,按地域与网络分层
- 第二步 · 开 H2:多数平台默认已开;确认协议列显示 h2,观察是否改善首屏多资源的加载
- 第三步 · 开 H3 并回退:CDN 侧开启,配置 Alt-Svc 回退,分地域抽样验证(重点看移动网络)
- 第四步 · 纳入监控:把协议版本分布、连接建立耗时、TLS 握手耗时加入看板,长期跟踪
速查卡
| 场景 | 做法 |
|---|---|
| 首屏很多小资源、高延迟网络 | 开 H2/H3,收益最明显 |
| 单一大文件下载 | 协议升级帮助有限,先看别处 |
| 接口本身慢(TTFB 高) | 先优化服务端,协议救不了 |
| HTTP/3 连不上 | 检查 UDP 是否被限,确认回退到 H2 生效 |
| 验证是否生效 | curl 看 http_version;DevTools 看 Protocol 列 |
| 判断是否值得做 | 先测 TTFB/LCP 基线,再决定 |
写在最后
协议升级不是"越快越好",而是对症才有效:它优化的是连接内的并发效率与握手延迟。先量出你的瓶颈——是服务端、是资源体积、还是连接建立——再决定要不要动协议。动之前有基线,动之后有对比,这才叫优化,而不是换个说法继续猜。
评论(0)