HTTP/3 是把 QUIC 用作传输层的 HTTP 最新版本,2022 年作为 RFC 9114 完成标准化,到 2024 年时全球排名前 1 万的网站中约 35% 已经支持。按 Cloudflare 的统计,2024 年 HTTP/3 流量占比达到了整体的 31%。短链接的重定向体验会随 HTTP 版本不同而在体感速度上产生差别,因此支持 HTTP/3 直接关系到短链接服务的竞争力。
HTTP/3 在短链接上真正见效的地方是首次连接的握手时间。HTTP/2 及之前用 TCP 加 TLS,需要 3 到 4 个 RTT (往返),而 HTTP/3 借助 QUIC 的 0-RTT 连接可以缩短到 1 个 RTT 以内。点击短链接时会发生 DNS 解析、TLS 握手、HTTP 请求、重定向响应的往返、向重定向目标的再次连接等多次往返。采用 HTTP/3 后握手的往返次数减少,首次连接的延迟下降,延迟和丢包越严重的移动网络,重定向的体感速度改善越明显。
3xx 响应的处理在 HTTP/3 中基本没有变化。301 (永久移动)、302 (临时移动)、307 (临时,保持方法)、308 (永久,保持方法) 的语义与 HTTP/2 相同。不过 QUIC 有一个特性:首次连接时服务器返回 Alt-Svc 头或 HTTPS 类型的 DNS 记录,就可以把后续连接切换到 HTTP/3,因此在返回 301 重定向的服务器一侧同时下发 Alt-Svc,向重定向目标服务器的连接用上 HTTP/3 的可能性就会提高。
与 CDN 的组合是把 HTTP/3 效果放到最大的关键。CloudFront、Cloudflare、Fastly 都已标准支持 HTTP/3,如果在边缘节点上就把重定向处理闭环完成,就能不经过回源往返直接响应。把短链接的重定向数据放在边缘键值存储 (Cloudflare Workers KV、CloudFront Functions 的内置缓存) 里,就可以从全球各地的边缘以 1 毫秒以内的延迟响应。
使用 0-RTT 有注意点。0-RTT 对减少重连时的往返有效,但存在重放攻击风险,因此只能用于像重定向处理这样没有副作用的 GET 请求。POST 请求以及会改变状态的操作,标准做法是不予适用。短链接的重定向属于 GET 请求的无副作用操作 (日志写入为异步),因此是适用 0-RTT 的有利条件。
HTTP/3 在运维层面容易被忽视的是 UDP 的过滤问题。部分企业局域网和老式防火墙会封锁 UDP 443,在这类环境下 HTTP/3 连接无法建立,会回退到基于 TCP 的 HTTP/2。由于回退的判定需要数百毫秒,反而出现首次连接延迟体感变差的悖论。如果采用 Alt-Svc 的 「persist=1」 或 DNS 的 HTTPS 记录,事先把支持 HTTP/3 的信息告知客户端,就能抑制回退时的延迟。
HTTP/3 与短链接的组合,对移动端用户体验、SEO 的页面速度评价、与 CDN 的亲和性全都有效。如果运营上能把 1 段重定向的总耗时压到 100 毫秒以内,搜索流量的跳出率与 SEO 评价两方面都会改善。