User-Agent 解析
拆出浏览器、内核、版本与系统,并给 UA-Client-Hints 对照。
解析分两层:词法层把一条 UA 切成可解释单元,规则表层按表内顺序优先命中品牌规则,给出内核、平台、架构、机型与抓取器的判定。命中了哪条规则、哪些片段没被吃掉,要用「显示命中的规则」那个默认关着的开关才逐项看到。
冻结与归零是最大的误差来源,页面把它们写进输出:Chromium 的 UA Reduction 在 M101 把 MINOR.BUILD.PATCH 归零、M107 冻结桌面平台串、M110 冻结 Android 平台串,于是 Linux; Android 10; K 里的 10 和 K 都不是真值;Apple Silicon 上照写 Intel Mac OS X;rv:109.0 是 Firefox 桌面从 110 起的长期冻结值,真版本在 Firefox/ 段;AppleWebKit/537.36 与末尾的 Safari/537.36 只是兼容尾巴,不是 WebKit 或 Safari 的版本。本页不联网、不查任何外部 UA 库:单行超过 1200 字符、含尖括号、或找不到任何「产品/版本」token 的直接拒绝并给原因,不做「猜一个浏览器」的兜底。Safari、Firefox 与 iOS 浏览器不发 UA-CH,这一栏写不适用。
User-Agent 解析怎么用
- 批量与逐行:一行一条 UA 连着贴,坏行单独报错不影响其余行,meta 行给「N 条已解析 · M 条被拒」。日志里攒的几十条可以一次贴完,超过 40 行按上限截断。输入按行处理,一次最多 40 行,超出的只报「另有 N 行未处理」。
- 两个开关:「给 Client Hints 对照」默认开,输出 Sec-CH-UA、Platform、Platform-Version、Arch、Bitness、Model、Mobile、Full-Version-List 八行推算值;「显示命中的规则」默认关,调试规则表或想弄清「这台设备为什么没被认出来」时再打开。「显示命中的规则」列出命中规则与未解释片段:没被吃掉的带版本 token(如 MyBrowser/3.2)会点名,提示它很可能才是真正的浏览器外壳或 App 品牌。UA-CH 对照只在 Blink 系且非抓取器时给出,八个 Sec-CH-UA-* 头逐项标明哪些低熵默认就发、哪些要 Accept-CH 协商并在响应里带 Vary、哪些值从冻结的 UA 里推不出来。
- 读输出:每行 UA 的原文、token 清单与注释组都是可选中的普通文本,本页没有复制按钮。原文一律转义后才渲染,贴进尖括号或 HTML 片段会被当成被拒的输入而不是被执行的内容。
- 词法层的三类单元:词法层把一条 UA 切成三类可解释单元:「产品/版本」token(名字默认不许有空格,仅 5 个多词白名单,如 Mobile Safari)、括号注释组(按嵌套深度取括号、按分号切片段)、+http:// 形式的联系方式 URL。
- 规则表覆盖到哪:规则表层是 30 条品牌规则按表内顺序优先命中:内核取 AppleWebKit、Gecko、Trident 三段自报值;平台走注释组,Windows 按 NT 号 8 档映射、macOS 22 档代号,外加 iOS/iPadOS、Android、ChromeOS 与 8 个小平台;架构认 15 个 token;机型认注释组里的 SM-G9910 这类档与 iPhone/iPad/iPod;抓取器与命令行客户端是 23 组名字,另有 HeadlessChrome、Puppeteer 等自动化规则、词尾 bot 与含 spider 或 crawler 的兜底,以及「(compatible; …) 只有 compatible 加联系方式 URL」的疑似判定。
常见问题
两条 UA 的 Chrome/ 段都是 126.0.0.0,为什么判出来的浏览器不一样?
品牌表是按顺序优先命中的:Edg/、OPR/、Vivaldi/、SamsungBrowser/ 这些更具体的 token 排在通用 Chrome 之前,所以带 Edg/126.0.0.0 的串判 Edge,只有 Chrome/ 的判 Chrome,被抢过之后那段 Chrome/ 就降级解释成「兼容段,只当内核版本读」。同理 iOS 上的 CriOS/FxiOS 给的是外壳版本,内核只能是系统 WebKit;微信、QQ、UC 这类容器判为品牌,内核取注释组里系统 WebView 的 Chrome/103.0.5060.129,那是系统控件版本,不是这个 App 的浏览器版本。
为什么它把 Windows 11 报成「Windows 10 或 11」,还把 macOS 报成 10.15.7?
因为 UA 里就没有这个信息:NT 10.0 同时覆盖 Windows 10 与 11,微软没换 NT 号;桌面 macOS 的版本串自 2017 年起冻结在 10_15_7,Chromium 更是整串平台段一起冻结。要区分只能走 UA-CH——Windows 11 的 Sec-CH-UA-Platform-Version 从 13.x 起,真实 macOS 版本属于高熵提示,服务端要 Accept-CH 协商并在响应带 Vary。架构同理:M107 之后 Win64; x64 只代表「Windows 桌面」,ARM64 机器也照写 x64,所以架构一栏只能当线索。
能不能拿这个结果做爬虫拦截或风控?
不适合。UA 完全由客户端自写:curl/8.7.1 会被判成抓取器,只是因为程序照默认值发了这个名字,换成 Chrome 126 的完整串不过是一行参数;无头与自动化工具同样可以伪装成正常浏览器,输出里对这类判定也直说了「任何安全或计费决策都不应依赖 UA 字符串」。本页适合做的是日志归类、规则表覆盖度检查和「这台设备为什么被推给了移动版样式」这类调试——名字规则命中的与漏判的,数量级是一样的。
iPad 的 Safari 为什么和 macOS 的 Safari 判不出区别?
iPadOS 13 以上勾了「请求桌面网站」后整串 UA 与 macOS 的 Safari 同形,只能判「UA 层面无解」,改用 navigator.maxTouchPoints 或指针媒体查询。
对应功能编号 #58无需安装,手机端同样可用按 Ctrl + K 换工具