User-Agent (UA) 是浏览器在每次 HTTP 请求中通过 User-Agent 头自报身份的字符串,里面塞着浏览器、内核、操作系统、设备型号等信息。本工具用 ua-parser-js 在浏览器本地解析,把一长串混杂的 UA 拆成 浏览器 / 操作系统 / 设备 / 引擎 / CPU 五个结构化字段。
UA 自 1990 年代以来形成了「为兼容性互相伪装」的奇特生态——Chrome 的 UA 里同时含 Mozilla/5.0、AppleWebKit、KHTML, like Gecko、Chrome、Safari。这是历史包袱:早期网站对浏览器做硬编码特性检测,新浏览器不得不”假装”成老浏览器才能通过判定。从 UA 反推真实浏览器需要按优先级匹配,标准库已经处理好这层逻辑,自己用正则匹配很容易踩坑。
UA 完全可由客户端控制,DevTools、curl -A、爬虫脚本都能任意伪造,不要把 UA 作为安全校验依据。Chrome / Edge 也在用 Client Hints(Sec-CH-UA-* 头)逐步替代 UA,UA 字符串本身正在 freeze 化。本工具支持 10+ 常见 UA 示例一键填充,所有解析在浏览器本地完成,UA 不会上传。
iPadOS 13 起,iPad 的 Safari 默认开启「桌面版网站」模式,UA 里主动伪装成 Mac——只剩 Macintosh; Intel Mac OS X 字样,再无 iPad 关键字。这是苹果有意为之,目的是让 iPad 拿到桌面体验。如果业务必须区分 iPad,建议同时检查 navigator.maxTouchPoints > 0,或使用 Client Hints 的 Sec-CH-UA-Platform——单看 UA 已不可靠。
历史兼容包袱。Mozilla/5.0 来自 Netscape 时代,当年很多网站只给 Mozilla 发"高级页面";后来 Chrome 沿用 Blink/WebKit,UA 里写 AppleWebKit/537.36 (KHTML, like Gecko) 是为了通过那些只识别 WebKit/Gecko 的老站点;末尾的 Safari/... 同样是兼容祖传逻辑。ua-parser-js 按优先级正则匹配,先识别 Edg/ Chrome/,再回退到 Safari,所以解析结果是准确的。
看 UA 的厂商后缀关键字:微信含 MicroMessenger/<版本>、支付宝含 AlipayClient/、钉钉含 DingTalk/、QQ 浏览器含 MQQBrowser/。本工具检测到任一关键字会高亮对应徽章。识别这些场景的常见用途:微信内禁止跳转外链、不能调起支付宝;分享需要走 JS-SDK;钉钉有自己的免登/扫码 API。判断方法不分 iOS/Android,UA 关键字一致。
完全可以伪造——浏览器 DevTools 的设备模拟、curl -A、Python requests 的 headers、Postman 都能任意改 UA。爬虫伪装成 Chrome 是常态。所以 UA 只能作为参考信息,绝不能用作安全校验:禁止用 UA 判断"是不是真人 / 是不是 iOS"再放行敏感操作。生产环境的爬虫识别需要结合 IP 信誉、JS 挑战、行为指纹等多重手段,单看 UA 会被分分钟绕过。
Chrome / Edge 自 2020 年起推动 User-Agent Client Hints(UA-CH),把 UA 拆成多个独立请求头:Sec-CH-UA(浏览器列表)、Sec-CH-UA-Platform、Sec-CH-UA-Mobile、Sec-CH-UA-Model 等,按需协商发送,更精确也更隐私友好。同时 UA 字符串本身正在 freeze——版本号会停留在固定值,未来从 UA 拿不到精准 minor 版本。当前过渡期:UA-CH 优先,传统 UA 兜底。ua-parser-js v2 已支持 withClientHints() 联合解析。
正常——大多数桌面浏览器的 UA 不携带精确架构。Windows 64 位会写 Win64; x64,能识别为 amd64;macOS 完全不区分(Intel / Apple Silicon 都是 Intel Mac OS X 10_15_7);Linux 通常只写 Linux x86_64。Apple Silicon Mac 在 UA 里故意保留 Intel 字样作为 Rosetta 时代的兼容遗产,这意味着从 UA 无法区分 Intel Mac 与 M1/M2/M3 Mac,必须用 Client Hints 的 Sec-CH-UA-Arch 才能拿到真实架构。