摘要

  • Chromium 的兼容性问答里,一条 Chrome 身份字符串同时带着 Mozilla/5.0、AppleWebKit、Chrome 和 Safari。它记录网站用 User-Agent 分流时误认 Chrome,甚至向用户显示“不支持”的情况。
  • Chrome 11 在 2011 年为配合其他浏览器修改部分字段;2023 年起,Chrome 110 逐步把 Android 版本和设备型号换成固定值。识别设备的细节减少了,历史兼容标记仍在。

一张写满别家名字的名片

Chromium 的网站兼容性问答展示过一条 Chrome 字符串:开头是 Mozilla/5.0,中间有 AppleWebKit 和 Chrome/2.0.167.0,末尾还有 Safari/525.13。这不是四个浏览器挤在同一个窗口里,而是一套被网站代码拿来认人的口令。问答说,JavaScript 或服务器端的 User-Agent 判断常把 Chrome 认错;有些页面干脆告诉访问者“浏览器不受支持”。Chromium 建议检查功能,而不是猜名字。

猜名字对网站很便宜。写一条“包含 Safari 就走这条路”的条件,比测试功能容易得多。条件一旦铺满网页,字符串里的每个词就变成用户所见页面的开关。浏览器想改名,先得考虑别人围着旧名写了多少代码。

删掉错误的语言,保留旧式外壳

2011 年 3 月 31 日的 Chromium 公告并列了 Chrome 10 与 11 的字符串。旧的 U 加密强度标记被移除;语言字段也被拿掉。团队承认 Chrome 的这个字段有 bug,不管用户想用什么语言,它一直写着 en-US。网站应从 Accept-Language 读取语言偏好。Windows 标记也调整了。Chromium 还解释,网站通常用同一套解析器处理多个浏览器,所以它要尽快跟上 Firefox 4 的变化;Google 自己的站点也碰到了兼容问题。

两个版本的例子仍都保留 Mozilla/5.0、AppleWebKit、Chrome 和 Safari。2022 年的 RFC 9110把 User-Agent 定义为产品标识及注释,承认网站用它处理兼容问题和分析访问情况,同时要求减少无谓的细节,以免助长设备指纹;它也劝实现者别借别家产品名称宣称兼容。标准说明字段应当怎样表达身份,Chromium 的记录则说明现成网站如何把旧格式变成负担。

手机型号退场,老名字没有

Chrome 2023 年的缩减公告说,从 Chrome 110 起,Android 版本与设备型号逐步改用固定值。公告的示例里,具体的 Android 13 手机在默认字符串里变成 Android 10、型号 K。目的在于减少跨站被动追踪。前后两个例子仍保留 Mozilla/5.0、AppleWebKit、Chrome 与 Safari,整体格式没有拆掉。

这张名片同时承担了两个工作:网站用它分配页面,追踪者也能用里面的细节辨认设备。Chrome 削减后者,又照顾前者。若有按日期记录的网站分流与缩减前后设备指纹测量,才能计算两种影响的规模;原始文件已经写出了取舍。手机型号可以被藏起来,兼容口令却还得给网站看。

来源