跳到正文
DevTools / User-Agent 解析

User-Agent 解析

User-Agent 请求头是一段积累了四十多年浏览器战争残留的字符串,而它至今仍决定着你的分析系统记录了什么、你的特性检测得出了什么结论,以及一个爬虫是否会被当成访客。本解析器把 UA 字符串拆成结构化字段——浏览器及版本、渲染引擎、操作系统、设备类型、厂商与型号、CPU 架构、是否机器人——并展示逐 token 的拆解过程,让你看到结论是怎么得出的,而不是盲信一个黑盒。

完全在浏览器本地运行——不会上传任何内容。

工作原理

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

常见问题解答

能依赖 User-Agent 做特性检测吗?

不能,而且它逐年变得更不可靠。Chrome 冻结了它所报告的版本号,那个精确数字是刻意做到没有信息量的;而任何客户端都可以发送任意字符串。应当通过测试 API 是否存在来检测特性:检查 typeof createImageBitmap 是不是函数,而不是从版本号去推断。版本嗅探在分析和为某个已知浏览器编写兼容处理时仍有正当用途,但不应该用它来决定某个特性是否启用。

为什么所有浏览器都说自己是 Mozilla?

历史遗留的意外。1990 年代,站点通过嗅探 Mozilla 来决定是否输出现代标记,于是并非 Mozilla 的浏览器也开始这样自称。Internet Explorer 自称 Mozilla 并附上 MSIE;Chrome 同时自称 Mozilla、AppleWebKit 和 Safari;这个模式因为一旦打破就会破坏站点而一直传播下来。它今天不携带任何信息,最好当作一个为了兼容而存在的固定前缀来读。

能用 UA 来识别机器人吗?

用于分析,可以,但要谨慎。用于安全,不行。UA 字符串是一种自我声明:想隐藏自己的爬虫会自称 Chrome,想被放行的会自称 Googlebot。验证身份需要对来源 IP 做反向 DNS 查询,确认它属于所声称运营方公布的网段,并再做一次正向查询确认能解析回来。任何仅基于字符串的判断都能被轻易绕过。

为什么报告的浏览器版本有时是错的?

因为基于 Chromium 的浏览器冻结了版本号。Chrome 报告的主版本号与真实版本一致,但 UA 字符串中的次版本号被固定为 0.0.0,目的正是降低用户被指纹识别的能力。如果服务端主动请求,真实版本可以通过 Sec-CH-UA 系列 Client Hints 请求头获得。对于近几年发布的任何浏览器,请把 UA 版本当作下界而不是精确值。

相关工具