Chrome 和 Firefox 版本 100

Chrome 和 Firefox 将在 几个月内 达到版本 100。这可能会导致依赖于识别浏览器版本执行业务逻辑的网站出现故障。本篇文章将介绍事件时间线、Chrome 和 Firefox 为减轻影响而采取的策略以及您如何提供帮助。

用户代理字符串

User-Agent (UA) 是浏览器在 HTTP 头部发送的字符串,以便服务器识别浏览器。该字符串也可以通过 JavaScript 访问,使用 navigator.userAgent。它通常采用以下格式

浏览器名称/主版本号.次版本号

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

  • 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) 中发布,然后是测试版,最后是稳定版渠道。

Chrome (发布计划) 2022 年 3 月 29 日
Firefox (发布计划) 2022 年 5 月 3 日

为什么三位数版本号会存在问题?

当浏览器在 12 年多前首次达到版本 10 时,发现 User-Agent 解析库存在许多问题,因为主版本号从一位数变成了两位数。

由于没有统一的规范可供遵循,不同浏览器的 User-Agent 字符串格式不同,并且网站特定的 User-Agent 解析存在差异。一些解析库可能存在硬编码的假设或错误,无法考虑三位数主版本号。许多库在浏览器过渡到两位数版本号时改进了解析逻辑,因此预计达到三位数里程碑将导致较少的问题。Chrome 团队的工程师 Mike Taylor 对常见的 UA 解析库进行了调查,没有发现任何问题。在现场运行 Chrome 实验发现了一些问题,这些问题正在得到解决。

浏览器正在采取哪些措施?

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

此外,还制定了备用缓解策略,以防版本 100 发布到稳定版渠道后,对网站造成的破坏超出了预期。

Firefox 缓解措施

在 Firefox 中,策略将取决于故障的严重程度。Firefox 有一个 站点干预机制。Mozilla webcompat 团队可以使用此机制对 Firefox 中出现故障的网站进行热修复。如果您在 Firefox URL 栏中输入 about:compat,您可以查看当前正在修复的内容。如果某个特定域名的网站在主版本号为 100 时出现故障,可以将其修复为发送版本 99。

如果故障范围很广,并且单个站点干预变得难以管理,Mozilla 可以暂时将 Firefox 的主版本号冻结在 99,然后测试其他选项。

Chrome 缓解措施

在 Chrome 中,备用计划是使用标志将主版本号冻结在 99,并将实际的主版本号报告在 User-Agent 字符串的次版本号部分 (代码已经 上线)。

User-Agent 字符串中报告的 Chrome 版本遵循以下模式:<主版本号>.<次版本号>.<构建号>.<修补程序号>。

如果采用备用计划,则 User-Agent 字符串将如下所示

99.101.4988.0

Chrome 还正在运行实验,以确保在字符串的次版本号部分报告三位数的值不会导致故障,因为 Chrome User-Agent 字符串中的次版本号在很长一段时间内都报告为 0。Chrome 团队将根据报告的故障数量和严重程度,决定是否采用备用选项。

您能做些什么来帮助?

任何增加 User-Agent 字符串复杂性的策略都会对生态系统产生重大影响。让我们共同努力,避免出现另一种奇怪的行为。在 Chrome 和 Firefox Nightly 中,您可以立即配置浏览器将版本报告为 100,并报告您遇到的任何问题。

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

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

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

  1. 转到 chrome://flags/#force-major-version-to-100
  2. 将选项设置为“已启用”。

测试和提交报告

  • **如果您是网站维护人员**,请使用 Chrome 和 Firefox 100 测试您的网站。查看您的 User-Agent 解析代码和库,并确保它们能够处理三位数版本号。我们已经整理了一些 目前导致故障的模式
  • **如果您开发 User-Agent 解析库**,请添加测试以解析大于或等于 100 的版本。我们的早期测试表明,最新版本的库可以正确处理。但 Web 是一个遗留系统,因此,如果您有旧版本的解析库,现在可能是检查并最终升级的时候了。
  • **如果您正在浏览网页**,并且注意到主版本号为 100 存在任何问题,请 在 webcompat.com 上提交报告

关于 Karl Dubost

总是在别处.

更多 Karl Dubost 撰写的文章…

关于 Chris Peterson

Chris 是 Mozilla Firefox for Android 团队的开发人员。

更多 Chris Peterson 撰写的文章…

关于 Ali Beyad

Ali Beyad 是 Google 的高级软件工程师

更多 Ali Beyad 撰写的文章…