User Agent 解析
从任意 User Agent 字符串中识别浏览器、操作系统和设备
-
版本: -
-
版本: -
-
厂商: -
-
版本: -
每个浏览器请求都带有一串用户代理(User-Agent),而原始的那一行肉眼很难读。本解析器把任意 UA 字符串拆成标注清楚的字段:浏览器名称与版本、操作系统、设备类型、厂商和渲染引擎。你可以粘贴来自日志或错误报告中的字符串,也可以按一下按钮分析自己的浏览器,看看网站究竟能了解到你的哪些信息。解析在页面内完成,因此字符串不会被发送到任何地方。
如何读懂一条 UA 字符串
一条典型的桌面字符串长这样:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
解析器会把它读作:浏览器 Chrome 120.0.0.0、操作系统 Windows 10、设备 desktop、引擎 Blink。字符串里很大一部分属于历史遗留:开头的 Mozilla 和结尾的 Safari 标记之所以存在,是为了让老旧的浏览器嗅探代码继续正常工作,二者都不意味着该浏览器真的是 Mozilla 或 Safari。真正有意义的线索,是括号里的平台标记,以及末尾那批标明浏览器及其版本的产品标记。
Mozilla 标记的简史
几乎每条 UA 开头的 Mozilla 一词都是历史遗物。网景的浏览器代号就是 Mozilla,当其他浏览器问世时,它们照抄了这个标记,免得那些认定「Mozilla 代表现代浏览器」的服务器把它们拒之门外。微软选择了「Mozilla/4.0 (compatible; MSIE…)」来通过这类检查,Chrome 后来出于同样原因同时加上了 Mozilla 和 Safari。结果是,开头的标记不携带任何可靠信息。请从括号里的平台标记往外读,并更相信最后一个产品标记——也就是浏览器名称和版本——而不是它前面的任何内容。
各字段的含义
| 字段 | 报告内容 | 示例 |
|---|---|---|
| Browser | 浏览器或具名爬虫,以及版本 | Chrome 120.0.0.0 |
| OS | 操作系统及版本 | Windows 10 |
| Device | desktop、mobile、tablet 或 bot | mobile |
| Vendor | 可检测到时给出的硬件厂商 | Apple |
| Engine | 渲染引擎名称 | WebKit |
Windows NT 版本会映射为常见名称:10.0 变成 10,6.3 变成 8.1,6.2 变成 8,6.1 变成 7,5.2 和 5.1 变成 XP,5.0 变成 2000。引擎字段报告的是把标记变成像素的运行时——Chromium 系浏览器用 Blink,Safari 用 WebKit,Firefox 用 Gecko,旧版 Internet Explorer 用 Trident。
实操示例
- 上面那条 Chrome 字符串解析为 Chrome 120.0.0.0、Windows 10、desktop、Blink,厂商为 Unknown。
Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Mobile/15E148 Safari/604.1解析为 Safari 17.1、iOS 17.1、mobile、厂商 Apple、引擎 WebKit。Mozilla/5.0 (Linux; Android 13; SM-X700) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36解析为 Chrome 119.0.0.0、Android 13、tablet、厂商 Samsung、引擎 Blink,因为这条 Android 字符串没有 Mobile 标记。Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)解析为 Googlebot 2.1、设备 bot、厂商 Google,而操作系统和引擎为 Unknown,因为没有匹配的标记。- 一条 Edge 字符串,例如
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0,会被报告为 Edge 而不是 Chrome,尽管其中含有 Chrome 标记。
检测顺序如何工作
爬虫在浏览器之前检查,模式涵盖 Googlebot、Bingbot、Baiduspider 和 YandexBot;一个看起来也像 Chrome 的爬虫仍会被报告为爬虫。随后浏览器模式按以下顺序运行:Edge、Opera、Internet Explorer、Chrome、Safari、Firefox。顺序很关键,因为 Edge 字符串同时含有 Chrome,而 Chrome 字符串同时含有 Safari。设备分类依次检查 bot、平板、手机、桌面,所以平板标记优先于通用的 Android 或 Mobile 标记。操作系统模式依次运行 iOS、Android、Windows Phone、Windows、macOS、Linux,最后是 Chrome OS。
局限与伪造
UA 是自我声明的,因此任何客户端都可以声称自己是任何浏览器——爬虫经常伪装成 Chrome,隐私扩展也会故意修改字符串。本解析器基于正则和一份固定的模式列表,所以冷门或全新的浏览器会返回 Unknown,而引擎版本从不提取。Windows 11 报告的是 Windows NT 10.0,因此显示成 Windows 10。桌面级 iPadOS 显示成 Mac。厂商检测覆盖常见的手机和平板品牌,但许多桌面设备仍无法识别。请把结果用于调试、日志分析和好奇探究,当决策真的取决于浏览器能力时,再与特性检测结合使用。
使用场景
- 复现用户在特定浏览器和操作系统组合下报告的 bug。
- 审计服务器日志,看看实际有哪些浏览器和爬虫在访问、各占多大比例。
- 检查自己的浏览器向你加载的每个网站暴露了什么。
- 在把保存的 UA 字符串加入测试套件前做一次合理性检查。
- 确认你预期的某个爬虫呈现的是它自称的身份。
相关工具
常见问题
解析器如何把 Edge 和 Chrome 区分开?
Edge 的 UA 里既有 Chrome 字样,也带有 Edg 标记。解析器按固定顺序检查其浏览器模式,并优先测试 Edge,所以 Edge 字符串会被归为 Edge,而不会掉到 Chrome 分支。
为什么引擎版本总是显示 Unknown?
解析器只按名称识别渲染引擎(Blink、WebKit、Gecko 或 Trident),并不会从字符串里提取引擎版本号,因此该字段按设计保持为 Unknown。
它如何判断设备是平板而不是手机?
它先查找 iPad、Tablet、PlayBook、Silk 等平板标记。此外,如果一条 Android 的 UA 不含 Mobile 字样,它也会被当作平板,因为 Android 平板通常省略该标记,而手机则会带上。
为什么运行 iPadOS 13 及以上的 iPad 会显示为 Mac?
较新的 iPadOS 默认请求桌面级网站,因此 Safari 发送的是 Macintosh 和 Mac OS X 的 UA,而非 iPad 标记。解析器看不到平板标记,就把它归为桌面 Mac。这是 UA 解析本身的局限,不是 bug。
为什么桌面浏览器的设备厂商显示 Unknown?
厂商检测聚焦于手机和平板硬件。桌面 UA 通常不会指明制造商,所以厂商字段报告 Unknown,而操作系统和浏览器字段仍然有值。
可以用 UA 可靠地拦截机器人吗?
不能。UA 是自我声明的,伪造起来轻而易举,而本解析器只识别一小部分具名爬虫。请把结果当作分析线索,而不是安全控制手段,并配合行为或网络层面的信号一起使用。
由 HandyTools Hub 团队审校 · 最后更新