词汇表·指纹识别
用户代理(用户代理字符串)
浏览器在 User-Agent 标头中发送并公开给 JavaScript 的浏览器和操作系统标识。
定义
在HTTP中,用户代理是发出请求的客户端软件,用户代理请求标头是它发送的文本字符串,以便服务器可以识别应用程序、操作系统、供应商和版本。 MDN 指出,此信息历来引起隐私问题,因为它可用于指纹识别。现代 Chromium 浏览器发送简化的字符串并将详细值移至用户代理客户端提示(Sec-CH-UA-* 标头和 navigator.userAgentData)。
它是如何运作的
- 浏览器在每次请求时都会发送 User-Agent;典型的 Chrome 桌面值类似于“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML,如 Gecko) Chrome/143.0.0.0 Safari/537.36”。保留“Mozilla/5.0”、“KHTML,如 Gecko”和“Safari”令牌以实现历史兼容性。
- 由于用户代理减少(从 Chrome 101 推出到 110),Chrome 将次要版本冻结为 0.0.0,使用固定桌面平台字符串,并在 Android 上发送固定的“Android 10; K”而不是真实的操作系统版本和设备型号。同样减少的值出现在 navigator.userAgent 和 navigator.platform 中。
- Chromium 浏览器默认还会发送低熵客户端提示 — Sec-CH-UA(品牌和主要版本)、Sec-CH-UA-Mobile 和 Sec-CH-UA-Platform。服务器可以通过 Accept-CH 响应头请求高熵提示,例如平台版本、模型、架构或完整版本列表,然后浏览器决定返回什么。
为什么这很重要
- 用户代理是浏览器指纹中的被动信号之一:它在没有任何脚本运行的情况下到达每个请求。
- 检测系统可以将用户代理字符串与客户端提示和 JavaScript 值(navigator.platform、屏幕尺寸、触摸支持)进行比较。价值观不一致的个人资料比普通的个人资料更引人注目。
- 指纹浏览器让每个配置文件设置其用户代理;好的工具可以使匹配的客户端提示、平台和浏览器引擎版本保持一致。
限制和常见误解
- “更改用户代理字符串会更改我的浏览器指纹。”它改变一个值;客户端提示、JavaScript API、Canvas/WebGL 输出和字体仍然描述真实设置,除非它们也一致更改。
- “用户代理字符串显示了我的确切操作系统和设备。”在精简版 Chrome 中,情况不再如此 — Windows 8.1 和 Windows 11 均报告“Windows NT 10.0”,而 Android 设备报告“Android” 10;K”。
- “稀有或非常新的用户代理更安全。”不寻常或不匹配的价值观会缩小你的范围;常见的、内部一致的组合不太独特。
示例: 配置文件在其用户代理中声称“Macintosh; Intel Mac OS X 10_15_7”,但其 Sec-CH-UA-Platform 提示显示“Windows”,并且 navigator.platform 返回“Win32”。比较这三个值的网站可以看到该配置文件与其声称的不符。
没有浏览器或代理可以保证帐户不会受到限制。遵守各个平台的规则。
来源
- MDN:用户代理标头 (浏览器文档)
- MDN:HTTP 客户端提示 (浏览器文档)
- Chromium:用户代理减少 (浏览器文档)
- Chrome 开发者版:用户代理客户端提示 (浏览器文档)
检查了2026-11-07。