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
- 打开 Firefox Nightly 的设置菜单。
- 搜索“Firefox 100”,然后勾选“Firefox 100 User-Agent 字符串”选项。
配置 Chrome 将主版本号报告为 100
- 转到 chrome://flags/#force-major-version-to-100
- 将选项设置为“已启用”。
测试和提交报告
- **如果您是网站维护人员**,请使用 Chrome 和 Firefox 100 测试您的网站。查看您的 User-Agent 解析代码和库,并确保它们能够处理三位数版本号。我们已经整理了一些 目前导致故障的模式。
- **如果您开发 User-Agent 解析库**,请添加测试以解析大于或等于 100 的版本。我们的早期测试表明,最新版本的库可以正确处理。但 Web 是一个遗留系统,因此,如果您有旧版本的解析库,现在可能是检查并最终升级的时候了。
- **如果您正在浏览网页**,并且注意到主版本号为 100 存在任何问题,请 在 webcompat.com 上提交报告。
关于 Karl Dubost
关于 Chris Peterson
Chris 是 Mozilla Firefox for Android 团队的开发人员。
关于 Ali Beyad
Ali Beyad 是 Google 的高级软件工程师