CDN 开启 HTTP/3 后部分用户反而打不开或变慢?QUIC、UDP 443 与回退机制排查指南
本内容发表于:2026-09-30 15:37:31
浏览量
1000

1.jpgCDN 开启 HTTP/3 后,大多数用户访问正常,少数网络却出现首屏变慢、连接超时,甚至完全打不开。这类故障通常集中在 QUIC 使用的 UDP 443、HTTP/3 广告、浏览器缓存和 HTTP/2 回退链路。排查时需要先确认请求实际用了 h3 还是 h2,再区分是 CDN 边缘、客户端网络,还是自建服务端的 UDP 配置问题。

先判断故障是否只发生在 HTTP/3

HTTP/3 把 HTTP 语义运行在 QUIC 之上,QUIC 默认使用 UDP。它与常见的 HTTP/2 over TCP 不是同一条传输路径。某个网络允许 TCP 443,不代表 UDP 443 一定可用。

先用同一台设备、同一个域名做两组测试。测试环境中的 curl 必须带 HTTP/3 支持,可以先查看版本信息:

curl -V

输出中包含 HTTP3,再继续测试:

curl --http3 -sS -o /dev/null -D - \
  -w 'http_version=%{http_version}\n' \
  https://www.example.com/

curl --http2 -sS -o /dev/null -D - \
  -w 'http_version=%{http_version}\n' \
  https://www.example.com/

--http3 允许 curl 在 HTTP/3 不可用时回退,适合观察普通客户端的访问结果。需要验证“只走 HTTP/3 能否成功”时,再使用:

curl --http3-only -I https://www.example.com/

如果 HTTP/2 正常、--http3-only 失败,问题范围已经缩小到 QUIC、UDP 443、HTTP/3 广告或客户端支持。两种协议都失败,则应继续检查 DNS、证书、域名绑定、CDN 配置和源站状态,不能把故障全部归到 HTTP/3。

浏览器也可以辅助确认。打开开发者工具的 Network 面板,显示 Protocol 列,重新加载页面,查看主文档和静态资源使用的是 h3、h2 还是 http/1.1。只看“HTTP/3 已开启”的控制台开关,无法证明当前请求已经走上 h3。

只有部分网络异常,重点检查 UDP 443

家庭宽带正常、公司 Wi-Fi 或校园网异常,是很典型的 UDP 路径问题。企业防火墙、VPN、访客网络、运营商设备和旧式 NAT 可能丢弃、限速或错误处理 UDP 443。客户端发出的 QUIC 数据包得不到回应时,浏览器通常会等待一段时间,再改走 TCP 443 上的 HTTP/2,因此用户感受到的是首个请求明显变慢。

可以让同一台设备分别连接家庭宽带、手机热点、公司网络和 VPN 复测。若问题随网络切换而出现或消失,浏览器和网站代码通常不是首要怀疑对象。应检查出口防火墙、上网行为管理、VPN 分流和 UDP 会话超时设置。

UDP 扫描结果只能作为线索。QUIC 服务不会像 TCP 一样完成三次握手,部分扫描工具会把无响应标记为 open|filtered。更可靠的证据来自实际 HTTP/3 请求、边缘日志、抓包结果和跨网络对比。

托管 CDN 与自建 HTTP/3 的检查位置不同

使用托管 CDN 时,HTTP/3 通常终止在 CDN 边缘。访客通过 QUIC 连接边缘节点,CDN 回源仍可能使用 HTTP/2 或 HTTP/1.1。此时在源站安全组开放 UDP 443,往往不能解决访客侧的 HTTP/3 故障,还会扩大源站暴露面。

托管 CDN 应检查以下项目:

  • HTTP/3 是否对当前域名和实际使用的分发配置生效;

  • 证书、SNI 和域名绑定是否覆盖该主机名;

  • CDN 是否仍保留 TCP 443 的 HTTP/2 或 HTTP/1.1 服务;

  • 边缘监控中 UDP、QUIC 握手和协议回退是否出现异常;

  • 配置变更是否已经传播到全部边缘节点。

如果 Nginx、Caddy、Envoy、HAProxy 或其他网关在自己的服务器上直接终止 HTTP/3,检查范围才包括云安全组、主机防火墙、负载均衡器、NAT 和容器端口映射。TCP 443 与 UDP 443 是两条独立规则,放行其中一条不会自动放行另一条。改动前保存现有规则,并限制到实际提供服务的主机,避免用“全部 UDP 放行”替代准确配置。

检查 Alt-Svc 与 DNS HTTPS 记录是否还在发布 h3

客户端需要知道站点支持 HTTP/3。常见发现方式包括响应中的 Alt-Svc,以及 DNS HTTPS 记录中的协议参数。例如站点可能在 HTTP/2 响应中返回:

Alt-Svc: h3=":443"; ma=86400

ma 表示这条替代服务信息可以缓存多长时间。如果已经关闭 HTTP/3,却仍持续发送 h3 广告,或者客户端还保留着旧的 Alt-Svc 缓存,就可能反复尝试不可达的 QUIC 端点。反过来,控制台已经开启 HTTP/3,但响应和 DNS 都没有发布可用的 h3 信息,客户端也可能继续使用 h2。

排查时从一个确定可用的 HTTP/2 请求开始,保存完整响应头,查看 Alt-Svc:

curl --http2 -sS -D - -o /dev/null https://www.example.com/

同时查询域名的 HTTPS 记录,核对 alpn、目标主机和端口是否与当前部署一致:

dig HTTPS example.com

修改 HTTP/3 端口、边缘主机或 DNS 配置后,要同时处理旧广告的有效期。临时关闭 HTTP/3 时,应停止发布失效的 h3 入口,并保留 TCP 443。只改服务端监听,不处理 Alt-Svc 或 HTTPS 记录,会让部分客户端在缓存有效期内继续尝试旧路径。

回退机制不完整,会把“变慢”放大成“打不开”

正常部署应同时提供 HTTP/3 和基于 TCP 的 HTTP/2 或 HTTP/1.1。UDP 443 受阻时,客户端仍能通过 TCP 443 完成访问。HTTP/3 可以作为优先路径,但不应成为网站唯一可用的传输协议。

如果用户完全打不开,重点核对以下情况:

  • TCP 443 被误关,只剩 UDP 443;

  • HTTP/2 或 HTTP/1.1 在边缘被禁用;

  • TCP 与 UDP 指向不同的负载均衡器,其中一条配置过期;

  • 两条路径使用了不同证书、SNI 或虚拟主机配置;

  • 防火墙对 UDP 采用静默丢弃,客户端回退等待时间被明显拉长;

  • 页面主域名可回退,但关键 API、字体、图片或第三方子域没有可用的 TCP 路径。

故障恢复阶段可以临时停止发布 h3 广告,让新连接稳定走 h2,同时保留现有配置以便回滚。确认 TCP 路径恢复后,再修复 UDP 443 并重新灰度开启 HTTP/3。不要通过关闭 TLS 校验或放开全部防火墙规则来掩盖协议配置问题。

修复后按网络与协议做交叉验证

一次成功访问不能证明问题已经消失。至少保留下面四组结果:

  • HTTP/3-only 请求成功,实际协议显示为 HTTP/3;

  • HTTP/2 请求成功,证书、状态码和内容均正常;

  • UDP 443 受限的测试网络仍能通过 h2 打开页面;

  • 家庭宽带、手机热点、公司网络和 VPN 中不再出现明显的首连超时。

再检查主文档、API 和关键静态资源,避免只验证首页。浏览器开发者工具、curl 输出、CDN 边缘日志和防火墙日志应能指向同一条结论。

长期运行时,可以分别观察 h3 与 h2 的请求量、握手失败、连接建立时间和回退比例。HTTP/3 开关本身不是优化结果。UDP 443 可达、h3 广告准确、TCP 443 回退可用,这三项同时成立,HTTP/3 才不会把少数网络用户挡在站点之外。

参考资料

  1. IETF RFC 9000:QUIC: A UDP-Based Multiplexed and Secure Transport

  2. IETF RFC 9114:HTTP/3

  3. IETF RFC 9460:Service Binding and Parameter Specification via the DNS(SVCB and HTTPS Resource Records)

  4. curl 官方文档:HTTP/3

  5. Cloudflare Developers:HTTP/3 (with QUIC)

资料核验日期:2026 年 9 月 30 日。