工作原理
User-Agent 是一串以空格分隔的产品 token,每个 token 后面可选地跟一个斜杠和版本号,括号内的注释携带平台细节。第一个 token 惯例是 Mozilla/5.0,而这个说法自 1993 年起就是假的:它之所以存活至今,是因为当年有站点嗅探它、不给它就会收到坏掉的页面,而这个习惯从此再也没有被撤销。现代 Chrome 发送的是 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36,它点名了三个渲染引擎,而只有一个是准确的。
这个例子说明了顺序为什么重要。Safari 和 Chrome 都声称基于 AppleWebKit,也都声称自己是 Safari,因此一个搜索 Safari 子串的解析器会把 Chrome 归类为 Safari。惯例是先扫描最具体的 token——Edge、再 Opera、再 Chrome、再 Safari——这正是基于 Chromium 的浏览器都要加上自己的 token(如 Edg/、OPR/)的原因。顺序搞错的解析器会把 Chrome 的全部市场份额算到 Safari 头上,而这在已发布的商业分析产品中确实发生过。
Client Hints 之所以被引入,是因为 UA 字符串既太长又太粗。Chrome 冻结了次版本号、把平台字符串缩减,并期望站点通过 Sec-CH-UA 系列请求头索取高熵细节,例如精确型号和平台版本。结果是 UA 解析对 Chromium 浏览器越来越只能给出近似值,任何依赖精确版本的特性检测在设计上就是脆弱的。通过平台 API 做特性检测,比嗅探版本号更耐久。
机器人识别是另一个问题,而且只是一种启发式。多数爬虫、监控和库都会表明身份——Googlebot、bingbot、curl、python-requests、Go-http-client——但任何客户端都能把请求头设成任意值,因此一个自称 Googlebot 的 UA 什么也证明不了。真正的验证需要反向 DNS 查询,确认来源地址属于所声称运营方的网段,这是服务端才能做的事。机器人标记可以用来做分析分群,绝不能用于访问控制,更不能用于安全决策。
常见应用场景
- 通过确认报告者实际使用的浏览器与版本,来诊断一个缺陷报告。
- 在分析系统里剔除机器人流量,以免污染转化数据。
- 检查是否有爬虫正在抓取你的站点,以及是哪一个。
- 确认移动端或桌面端跳转逻辑实际看到的是哪一类设备。
- 排查满是陌生 UA 字符串的请求日志,识别扫描器。
- 验证你自己编写的客户端库确实发送了预期的请求头。
最后更新: 2026-10-14