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

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

Ali Beyad
Ali Beyad
Karl Dubost
Karl Dubost
Milica Mihajlija
Milica Mihajlija

ChromeFirefox 将在几个月内达到 100 版。这可能会导致依赖于识别浏览器版本来执行业务逻辑的网站出现问题。本文将介绍事件时间轴、Chrome 和 Firefox 为缓解影响而采取的策略,以及您可以提供的帮助。

用户代理字符串

User-Agent (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 开发者会使用各种技术来解析这些字符串,从自定义代码到使用 User-Agent 解析库,然后这些解析结果可用于确定相应的处理逻辑。User-Agent 和任何其他版本报告机制很快将报告三位数的版本号。

版本 100 时间表

版本 100 的浏览器将先以实验版(Chrome Canary、Firefox Nightly)的形式发布,然后是 Beta 版,最后是稳定版。

浏览器 时间轴
Chrome(发布时间表 2022 年 3 月 29 日
Firefox(发布时间表 2022 年 5 月 3 日

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

在 12 年前,浏览器首次达到版本 10 时,随着主要版本号从一位数变为两位数,发现了许多与 User-Agent 解析库相关的问题

由于没有统一的规范可遵循,不同浏览器的 User-Agent 字符串格式不同,并且会针对网站进行 User-Agent 解析。某些解析库可能存在硬编码的假设或 bug,这些假设或 bug 不考虑三位数的主要版本号。在浏览器改用两位数版本号时,许多库都改进了解析逻辑,因此达到三位数里程碑后,预计会出现的问题会更少。Chrome 团队的工程师 Mike Taylor 对常见的 UA 解析库进行了调查,但未发现任何问题。在现场运行 Chrome 实验时出现了一些问题,我们正在努力解决这些问题。

浏览器在采取哪些措施来应对此问题?

Firefox 和 Chrome 一直在开展实验,在实验中,浏览器的当前版本会报告主要版本为 100,以检测可能的网站中断问题。这导致了一些报告的问题,其中一些问题已得到解决。这些实验将持续运行,直到版本 100 发布。

此外,我们还制定了备用缓解策略,以防向稳定渠道发布的 100 版对网站造成的损害超出预期。

Chrome 缓解措施

在 Chrome 中,备用方案是使用标志将主要版本冻结为 99,并在 User-Agent 字符串的次要版本部分报告实际的主要版本号(相应代码已发布)。

User-Agent 字符串中报告的 Chrome 版本遵循 <major_version>.<minor_version>.<build_number>.<patch_number> 模式。

如果采用备份方案,User-Agent 字符串将如下所示:

99.101.4988.0

由于 Chrome User-Agent 字符串中的次要版本很长时间以来一直报告 0,因此 Chrome 还在开展实验,以确保在字符串的次要版本部分报告三位数值不会导致中断。Chrome 团队将根据报告的问题数量和严重程度来决定是否采用备用选项。

Firefox 缓解措施

在 Firefox 中,策略取决于损坏程度。Firefox 具有网站干预机制。Mozilla 网站兼容性团队可以使用此机制在 Firefox 中热修复损坏的网站。如果您在 Firefox 网址栏中输入 about:compat,则可以查看当前正在修复的问题。如果某个网站在特定网域上的主要版本为 100 时出现问题,可以改为发送版本 99 来解决此问题。

如果破坏现象普遍存在,则可以冻结主要版本号。然后,您可以采用不同的策略,每种策略都有各自的优缺点。Mozilla 可以将真实版本号作为次要版本号发送、将字符串完全冻结,或通过其他参数发送真实版本号。

每种增加 User-Agent 字符串复杂性的策略都会对生态系统产生重大影响。让我们一起努力,避免再次出现此类奇怪行为。

您能做些什么来帮助我们?

在 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 字符串”选项。

测试和文件报告

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