首页/安全/加密与证书速查/HTTP/3 与 Alt-Svc 通告
TLS 与 HTTPS60 条

HTTP/3 与 Alt-Svc 通告

服务端用 Alt-Svc 响应头(或 HTTPS DNS 记录)通告 HTTP/3 端点,客户端缓存后尝试 QUIC;没有通告时即使服务端支持 QUIC,客户端也可能不会尝试。

加密与证书速查安全更新于 2026-10-13

HTTP/3 与 Alt-Svc

HTTP/3 运行在 QUIC 之上(使用 UDP),服务端必须通过 Alt-Svc 响应头或 HTTPS DNS 记录告知客户端「这个域名也支持 h3」。客户端缓存该信息后,后续连接才会尝试 QUIC;没有通告时,即使服务端已经支持 QUIC,客户端通常也不会主动尝试。因此遇到「服务端配了 h3、访问却仍是 h2」的情况,第一个检查点就是 Alt-Svc 是否下发、UDP 是否通畅。

基本信息

响应头示例Alt-Svc: h3=":443"; ma=86400(ma 为缓存秒数)
DNS 方式HTTPS 记录(SVCB / HTTPS RR)可在连接前告知 h3 支持
nginx 支持1.25.0 起提供实验性 http_v3 模块,需要 TLS 1.3 与 UDP 监听
网络前提沿途设备与安全组都要放行 UDP 443
验证工具curl --http3、浏览器开发者工具中的协议列

典型使用场景

  • 弱网与高丢包环境下的首包与建连优化:QUIC 的 0/1-RTT 建连优势明显
  • 移动端多网络切换场景:连接迁移可减少切网后的重建开销
  • 灰度上线 h3:先小流量验证 UDP 通路与 CDN 行为
  • 排查「通告了 h3 但访问反而变慢」:多为 UDP 被拦导致先失败再回退
  • 多 CDN 场景核对通告端点,避免后端与 CDN 下发冲突信息

查看与配置

查看与配置
curl -sI https://example.com | grep -i alt-svc        # 查看是否通告 h3
curl -sI --http3 https://example.com | head -3          # 强制用 h3 请求
curl -so /dev/null -w 'http_version=%{http_version}\n' https://example.com/
# nginx(实验性)关键片段:
#   listen 443 quic reuseport;
#   add_header Alt-Svc 'h3=":443"; ma=86400';

HTTP/3 通路检查项

检查项命令或位置预期结果
客户端协商curl --http3 -w '%{http_version}'输出 3 或 3.0
服务端通告curl -sI | grep -i alt-svc含 h3= 与 ma 值
UDP 可达从客户端探测 443/udp无拒绝、无明显丢包
DNS 记录dig +short HTTPS example.com返回含 alpn 信息的记录
Alt-Svc 会被客户端按 ma 指定的秒数缓存:切网、回退或灰度期间出现短暂异常属于预期行为,排查时先清缓存或用无痕窗口复测。CDN 场景下通告通常由 CDN 生成,后端不要再下发不一致的端点。
迁移节奏建议:先在测试域名确认 UDP 通路与 CDN 行为,再用小流量灰度;监控上除了成功率,还要盯「首次访问耗时」,因为 QUIC 被拦时最先恶化的是首包体验,而不是可用性。

易错点

  • 只放行 TCP 443、未放行 UDP 443 → 客户端尝试 QUIC 失败后才回退,表现为首次访问偶发变慢
  • 服务端支持 h3 却不下发 Alt-Svc → 客户端不会尝试,测试结论容易误判为「不支持」
  • 在 CDN 后面自行添加 Alt-Svc 头 → 与 CDN 通告冲突,客户端可能连到不存在的端点
  • 把 h3 当成独立于 TLS 的机制 → QUIC 仍使用 TLS 1.3 握手,证书与套件配置同样生效

数据来源与参考

  • RFC 9114(HTTP/3)
  • nginx 官方文档(ngx_http_v3_module)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌