User-Agent Client Hints 迁移:不用完整 UA 字符串也能测量设备
Chrome 正把 User-Agent 字符串削减为一个被冻结的空壳。本文讲解隐私优先的分析如何通过 Client Hints 读取设备信号,而不做指纹识别。
User-Agent 字符串的缓慢死亡
几十年来,User-Agent 请求头一直是分析领域回答基本问题的主力:哪个浏览器、哪个操作系统、移动端还是桌面端?它同时也是一项指纹识别隐患。像 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/xxx.0.0.0 Safari/537.36 这样的完整 UA 字符串会泄露精确的版本号和平台细节,与其他信号结合后就能帮助识别出具体的访客。
Google 的 User-Agent 缩减计划已经修剪这串字符好些年了。Chrome 现在发送的是缩减版 UA:平台版本被冻结,次版本号字段被清零。按照 Chrome 文档的说法,其意图是移除可被动获取的熵,同时保留一个结构化的、需主动申请的替代方案:User-Agent Client Hints(UA-CH)。
对于在 2026 年构建分析系统的人来说,实际后果很清楚。解析旧版 UA 字符串来获取浏览器大类之外的任何信息,都会越来越不可靠——也越来越是错误的做法。
Client Hints 究竟如何工作
UA-CH 把设备信息拆成一个个可按需索取的提示,而不是压缩进一串密集的字符串。低熵提示默认随每个请求发送:
Sec-CH-UA—— 品牌与主要版本列表Sec-CH-UA-Mobile—— 布尔值?0/?1Sec-CH-UA-Platform—— 例如"macOS"
高熵提示——完整平台版本、架构、机型、位数——除非服务器明确索要,否则不会发送。服务器通过 Accept-CH 响应头提出请求,浏览器随后可能在后续请求中带上它们。Sec- 前缀意味着这些请求头由浏览器控制、无法被脚本设置,这是一项很有意义的完整性保证。
这种反转对隐私至关重要。默认姿态是最小披露。额外的熵成了一个需要刻意为之的动作,并记录在你自己的响应头里,而不是从每位访客身上悄悄收割的东西。
以隐私优先的视角解读这一转变
Monoid 刻意留在这条边界的低熵一侧。我们从不发送 Accept-CH 去拉取架构、机型或完整平台版本,也从不把看到的提示组合成稳定的设备签名。那就是指纹识别——从设备特征重建出一个标识符——正是 UA 缩减所要防范的做法,也正是 ePrivacy 指令第 5(3) 条和各浏览器的反指纹政策所认定的"访问终端设备信息"。
默认的低熵提示,足以回答分析本就该问的那些问题:
- 从
Sec-CH-UA得到的浏览器大类与主版本号,用于兼容性与支持规划。 - 从
Sec-CH-UA-Mobile得到的移动端与非移动端,用于布局和 Core Web Vitals 的分群。 - 从
Sec-CH-UA-Platform得到的平台,用于按操作系统拆分。
关键在于:这些是聚合维度,而不是按访客的主键。一个布尔值加一个平台名称由数百万访客共享,单凭它们并不具备任何有意义的识别能力。
在边缘读取提示
由于 Client Hints 就是普通的请求头,边缘 Worker 无需任何客户端脚本即可读取。在 Cloudflare 上,低熵提示会随传入的 Request 对象一起到达:
export default {
async fetch(request) {
const brands = request.headers.get('Sec-CH-UA') || '';
const isMobile = request.headers.get('Sec-CH-UA-Mobile') === '?1';
const platform = request.headers.get('Sec-CH-UA-Platform') || '';
// 只推导粗粒度维度;绝不持久化组合键。
return new Response('ok');
}
};
请注意这里缺了什么:没有回应 Accept-CH,没有索取高熵提示,也没有对组合后的值做哈希。Sec-CH-UA 的值是一个结构化列表,解析时务必小心——它包含有意加入的 "GREASE" 品牌条目,专门用来阻止脆弱的精确匹配式解析,这一手法是规范从 TLS 借鉴来的。
你的数据管道该改什么
如果你的分析仍在用正则匹配完整的 UA 字符串,随着时间推移会有三处崩坏:版本号会漂移成 .0.0.0,平台版本被冻结,基于子串匹配的移动端检测也越来越不可靠。迁移路径很直接:
- 优先使用结构化的低熵提示,而不是解析 UA 字符串。
- 把缩减版 UA 字符串仅当作面向老旧客户端的回退方案。
- 抵御"以防万一"索取高熵提示的诱惑——每多一个提示,都会扩大你的指纹识别面和合规风险敞口。
更宏观的启示,与我们构建的一切一脉相承。浏览器厂商正在稳步地把被动熵从 Web 平台上清除。正确的应对不是通过新 API 去追逐它,而是设计一套从来就不需要它的测量方式。
Comments
Loading comments…