写过前端的人都踩过这个坑——页面每次都要等好几秒才连上,今天 Firefox 155 用 Happy Eyeballs v3 把这件事彻底原生化了

打开一个网页,浏览器一直转圈,你以为是服务器慢,实际上可能是浏览器在傻等 IPv6 超时才 fallback 到 IPv4,或者在等 HTTP/3 握手失败才切回 HTTP/2。这个串联等待的过程,短则几百毫秒,长则好几秒,用户体验就这么被吃掉了。

Firefox 155 刚刚把这件事彻底原生化了。

以前的连接策略:串行试错,慢了活该

传统浏览器访问一个网站,连接策略是这样的:先查 DNS,拿到 IP 地址列表之后,按顺序挨个试——先试 IPv6,如果超时再试 IPv4;IPv6 成功了,再建立 HTTP/3,失败就降级 HTTP/2,再失败就 TCP。每个步骤都要等上一个失败或超时才能继续,整条链路是串行的。

这在 IPv6 质量好的环境下没什么问题,但现实是:很多企业网络、校园网、甚至部分运营商的 IPv6 路由质量一言难尽,超时等待就成了常态。

Happy Eyeballs v3:并行走,不等待

Happy Eyeballs 是一个 IETF 标准草案,核心思想就是「谁先来用谁」——不再傻等某个路径失败,而是多个候选路径同时发起,浏览器取第一个返回结果的。

Firefox 155 实现的 Happy Eyeballs v3 在这基础上又进了一步:

不只是 IPv4 vs IPv6 并行

以前的 Happy Eyeballs v1/v2 主要解决 IPv4/IPv6 串行问题。v3 在此基础上,把 HTTP/2 和 HTTP/3 也纳入了并行候选——DNS 返回的 HTTPS 记录里会附带服务器支持的协议列表(alpn=”h3,h2″),Firefox 拿到这个信息之后,会同时发起 HTTP/3(QUIC)和 HTTP/2(TCP)两个连接,谁先完成 TLS 握手就用谁。

简单说:不再等一个协议死了才换,而是让几个协议同时赛跑,先到的赢。

DNS HTTPS 记录(RFC 9460)

现代 DNS 可以直接告诉浏览器「这个域名支持哪些协议」,不需要浏览器自己去试:

example.com.  300  IN  HTTPS  1  .  alpn="h3,h2"

Firefox 155 读取这个记录之后,直接在本地生成多个连接候选,不再需要服务端额外发出 Alt-Svc 响应头。

QUIC v2:无回合计步

HTTP/3 底层用的是 QUIC 协议(基于 UDP),QUIC v2 是 2024 年标准化的新版本(RFC 9369)。Firefox 155 支持 QUIC v2 的版本协商:当服务器同时支持 v1 和 v2 时,两者可以直接协商到 v2,不需要额外的 round trip。

这个优化对高延迟网络尤其有价值——每个 round trip 都是几十到几百毫秒,能省一个是一个。

实际效果

根据 Mozilla 的说明,Happy Eyeballs v3 主要在以下场景有收益:

  • IPv6 路由质量差的网络:不用再等 IPv6 超时,IPv4 直接上
  • HTTP/3 不可用的网络:HTTP/2 和 HTTP/3 并行,HTTP/2 先到就先用了
  • 多协议混合环境:现代 DNS 记录同时暴露多个协议能力,浏览器自己做最优选择

不过 Mozilla 也承认了一个已知问题:在某些封锁 UDP 的企业网络里,QUIC/HTTP/3 会被防火墙拦截,Firefox 会 fallback 失败,导致页面加载极慢甚至加载不出来。临时解法是把 network.http.happy_eyeballs_enabled 设为 false,预计在 Firefox 155.0.1(2026-09-08 前)中修复。

作为前端工程师,你需要做什么?

实际上你可以不做任何事。这是浏览器内置的连接策略优化,你的代码完全不需要改。

但有几件事值得心里有数:

1. DNS HTTPS 记录值得配置

如果你的服务器支持 HTTP/3,在 DNS 里加上 HTTPS 记录(RFC 9460),可以让 Firefox 155 更早知道你的协议能力,不需要等 Alt-Svc 头:

_your-site.example.com.  300  IN  HTTPS  1  .  alpn="h3,h2"

2. 服务器端 HTTP/3 和 HTTP/2 要同时可用

Happy Eyeballs v3 并行候选的前提是服务器真的支持多个协议。如果你的服务器只配了 HTTP/2 没有 HTTP/3,或者反过来,浏览器并行的收益就会打折扣。

3. 企业网络要留意 UDP 封锁

如果你的产品面向企业内网用户,注意 QUIC/HTTP/3 可能在某些企业防火墙环境下无法工作。Firefox 155.0.1 修复前的这段时间,Fallback 逻辑可能有问题。

总结

Firefox 155 用 Happy Eyeballs v3 把浏览器的连接策略从「串行试错」改成了「并行赛跑」——IPv4/IPv6、HTTP/2/HTTP/3 同时发起,谁先到用谁,不再傻等。这是 IETF 草案级别的标准,对用户来说感知最明显的就是「页面好像变快了」,但前端工程师不需要改任何代码。

唯一需要注意的是:如果你的用户群体里有不少在 UDP 被封的企业网络里用 Firefox 的,这段时间可能会遇到奇怪的页面加载慢问题,知道这个机制之后排查起来会快很多。

评论区

0 条评论

登录后可评论。

阿柯·前端架构 14 阅读