Chrome 和 Firefox 即将登陆主要版本 100

用户代理字符串的变化、Chrome 和 Firefox 为减轻影响而采取的策略,以及您如何提供帮助。

阿里·贝亚德
Ali Beyad
卡尔·杜波斯特
Karl Dubost
米利卡·米哈吉利亚 (Milica Mihajlija)
Milica Mihajlija

ChromeFirefox 将在几个月内发布至 100 版。这可能会导致那些依靠识别浏览器版本来执行业务逻辑的网站出现服务中断。这篇博文介绍了事件时间轴、Chrome 和 Firefox 为减轻影响而采取的策略,以及您可以如何提供帮助。

用户代理字符串

用户代理 (UA) 是浏览器在 HTTP 标头中发送的字符串,因此服务器可以识别浏览器。您也可以使用 navigator.userAgent 在 JavaScript 中访问该字符串。通常采用如下格式:

<browser_name>/<major_version>.<minor_version>

例如,发布此博文时浏览器的最新版本为:

  • Chrome:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36
  • Firefox:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0
  • Safari:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Safari/605.1.15

主要版本 100 - 三位数版本号

主要版本 100 是 Chrome 和 Firefox 的重大里程碑版本。此外,由于我们从两位数的版本号转变为三位数的版本号,这可能导致网站出现中断。Web 开发者会使用各种技术来解析这些字符串,从自定义代码到使用用户代理解析库,这些库随后可用于确定相应的处理逻辑。用户代理和任何其他版本报告机制很快就会报告一个三位数的版本号。

版本 100 时间表

100 版浏览器将首先发布实验性版本(Chrome Canary 版、Firefox Nightly),然后是 Beta 版,最后发布在稳定渠道中。

Browser 时间表
Chrome(发布时间表 2022 年 3 月 29 日
Firefox(发布时间表 2022 年 5 月 3 日

为什么三位数的版本号会出问题?

在 12 多年前浏览器首次达到版本 10 时,由于主要版本号从 1 位数变为 2,我们发现 User-Agent 解析库存在许多问题

由于无需遵循单一规范,不同的浏览器在 User-Agent 字符串和针对特定网站的 User-Agent 解析方面会采用不同的格式。某些解析库可能包含硬编码的假设或 bug,而不将三位数的主要版本号考虑在内。许多库都改进了浏览器改为两位数版本号时的解析逻辑,因此达到三位数里程碑预计会减少问题。Chrome 团队的工程师 Mike Talor 对常见的 UA 解析库进行了一项调查,并未发现任何问题。在该领域运行 Chrome 实验时,我们发现了一些问题,我们正在努力解决相关问题。

浏览器在执行什么操作?

Firefox 和 Chrome 都在进行实验,其中当前版本的浏览器报告为 100 主要版本,以检测可能出现的网站故障。由此引发了一些被报告的问题,其中一些问题已被修复。这些实验将继续运行,直到版本 100 发布。

我们还提供了备份缓解策略,以防版本 100 发布至稳定版对网站造成比预期更多的损害。

Chrome 缓解措施

在 Chrome 中,备份方案是使用标志将主要版本冻结为 99,并在用户代理字符串的次要版本部分(代码已经降落)报告实际的主要版本号。

用户代理字符串中报告的 Chrome 版本遵循 <major_version>.<minor_version>.<build_number>.<patch_number> 格式。

如果使用的是备份方案,则用户代理字符串将如下所示:

99.101.4988.0

Chrome 还会运行实验,以确保报告字符串的次要版本部分中的三位数值不会导致中断,因为 Chrome 用户代理字符串中的次要版本已很长时间都报告为 0。Chrome 团队将根据所报告问题的数量和严重程度决定是否使用备份选项。

Firefox 缓解措施

在 Firefox 中,策略将取决于破坏的重要程度。Firefox 具有网站干预机制。 Mozilla webcompat 团队可以使用这种机制热修复 Firefox 中损坏的网站。如果您在 Firefox 网址栏中输入 about:compat,就可以看到当前正在修复的问题。如果某个网站在特定网域上的主要版本为 100,则可通过发送版本 99 来解决此问题。

如果破坏范围较广,则可以冻结主要版本号。在这种情况下,有不同的可能的策略,每种策略都有自己的优缺点。Mozilla 可以将实际版本号作为次要版本号发送,完全按原样冻结字符串,或通过其他参数发送实际版本号。

每一种增加用户代理字符串复杂性的策略都会对生态系统产生重大影响。让我们一起来避免再次奇怪的行为。

您可以做些什么来提供帮助?

在 Chrome 和 Firefox Nightly 中,您可以将浏览器配置为立即将版本报告为 100 并报告您遇到的任何问题。

将 Chrome 配置为将主要版本报告为 100

  1. 转到 chrome://flags/#force-major-version-to-100
  2. 将选项设置为 Enabled

配置 Firefox Nightly,将主要版本报告为 100

  1. 打开 Firefox Nightly 的“设置”菜单。
  2. 搜索“Firefox 100”,然后勾选“Firefox 100 User-Agent String”选项。

测试并提交报告

  • 如果您是网站维护人员,请使用 Chrome 和 Firefox 100 测试您的网站。请查看您的用户代理解析代码和库,并确保它们能够处理三位数的版本号。我们编译了一些目前颇具突破性的模式
  • 如果您开发了 User-Agent 解析库,请添加测试以解析大于或等于 100 的版本。我们的早期测试表明,最新版本的库可以正确处理它。不过,Web 由来已久,因此,如果您有旧版解析库,是时候检查问题并最终升级了。
  • 如果您正在浏览网页,并发现主要版本 100 存在任何问题,请在 webcompat.com 上提交报告