随着双方互飙版本号,Chrome 和 Firefox 的开发人员均表达出对 100 以上的三位数版本号的担忧。
12 年前,当时流行的浏览器在首次达到版本 10 时,由于主要版本号从一位数变为两位数,在 User-Agent 解析库中发现了许多问题。在没有规范可遵循的情况下,不同的浏览器对 User-Agent 字符串和特定于站点的 User-Agent 解析具有不同的格式。
此外,由于没有考虑到三位主要版本号,一些 UA 解析库可能有编码逻辑上的错误。不过当年浏览器版本号从一位数变成两位数时,许多 UA 解析库都改进了解析逻辑,因此,三位数的版本号在 UA 解析库中应该不会出什么问题。
Chrome 团队的工程师 Mike Taylor 对常见的 UA 解析库进行了调查,但没有发现任何问题。在现场运行 Chrome 实验时发现了一些问题,这些问题正在解决中。
应对方案
Firefox 和 Chrome 都在进行实验,尝试把当前版本的浏览器的主要版本号设置成 100,以检测网站可能出现的问题。这类实验找到了一些可能出现的问题,其中一部分已经修复,实验将继续运行,直到版本 100 发布。
除此之外,每个浏览器厂商都对 100 版本号制定了备份的缓解策略,以防止 100 版发布到稳定渠道后突发恶疾,对一些网站造成不可逆的伤害。
Firefox 缓解
在 Firefox 中,缓解策略将取决于损坏的重要性。
Firefox 有一个站点干预机制,Mozilla webcompat 团队可以使用这种机制在 Firefox 中热修复损坏的网站。在 Firefox URL 栏中输入内容 about:compat就可以看到当前正在修复的内容。
如果站点在特定域上的主要版本为 100 时中断,则可以通过发送 版本 99 来修复它。如果破坏范围很广,并且个别站点的干预变得难以管理,Mozilla 可以将 Firefox 的主要版本暂时冻结在 99,然后测试其他选项。
Chrome 缓解
Chrome 版本中报告的 User-Agent 字符串遵循该模式: ...(主要版本号_次要版本号_构建号_补丁号)。
目前在 Chrome 中的备用方案是直接将 User-Agent 字符串中的主要版本号冻结在 99,然后在次要版本部分报告真正的主要版本号(相关代码已经登陆)。如果使用备份计划,则 Chrome 101 版本 的 User-Agent 字符串将如下所示:99.101.4988.0 ,99
由于 Chrome UA 字符串中的次要版本号很长一段时间都是 0,所以 Chrome 还在进行实验,以确保次要版本号部分写三位数的值不会导致 Bug。
Chrome 团队将根据报告的问题的数量和严重程度决定是否使用备份选项。
用户可参与测试
在 Chrome 和 Firefox Nightly 中,用户也可以手动把浏览器的版本号改成 100 ,然后测试日常使用有没有问题。
Firefox Nightly:
- 打开 Firefox Nightly 的设置菜单。
- 搜索“Firefox 100”,然后选中“Firefox 100 User-Agent String”选项。
Chrome:
(1)URL 栏输入 chrome://flags/#force-major-version-to-100
(2)将选项设置为“启用”。
- 如果你是网站维护者,请使用 Chrome 和 Firefox 100 测试网站,检查 User-Agent 解析代码和库,并确保它们能够处理三位数的版本号,在此可查看目前正在受影响的网站模式。
- 如果你开发一个 User-Agent 解析库,添加测试来解析大于等于 100 的版本号。浏览器厂商早期的测试表明,最新版本的 UA 解析库都可以正确处理它。但如果你有旧版本的解析库,是时候检查并升级了。
- 如果你是浏览器用户,在浏览网页时发现主要版本 100 有任何问题,请在 webcompat.com 上提交报告。