User-Agent 解析
把 UA 字符串贴进来,拆成浏览器、引擎、系统、设备、厂商和 CPU 架构几个字段。规则全部在本机跑,UA 不会发给任何人。
预设样本
解析结果
等待输入
浏览器的判定规则与顺序
顺序就是判定优先级,从上往下匹配,命中即停。表中标了「为什么必须靠前」的规则是最容易踩坑的地方。
| 顺序 | 浏览器 | 匹配特征 | 为什么排在这个位置 |
|---|---|---|---|
| 1 | 微信 | MicroMessenger | 微信内置浏览器会原样带上 Chrome 和 Safari 的标记,必须在它们之前判出来。 |
| 2 | QQ 浏览器 | MQ?QBrowser | 同样带着 Chrome 标记,且手机版 MQQBrowser 与桌面版写法不同。 |
| 3 | QQ 内置浏览器 | (?:^|[\s;])QQ\/[\d.]+ | QQ 客户端里点开链接走的是这条规则,它没有 QQBrowser 关键字。 |
| 4 | UC 浏览器 | UCBrowser|UCWEB | 按常规特征匹配。 |
| 5 | 百度浏览器 | BIDUBrowser|baidubrowser|baiduboxapp | 按常规特征匹配。 |
| 6 | 夸克浏览器 | Quark | 按常规特征匹配。 |
| 7 | 三星浏览器 | SamsungBrowser | 按常规特征匹配。 |
| 8 | 华为浏览器 | HuaweiBrowser|HBPC|HarmonyBrowser | 按常规特征匹配。 |
| 9 | 小米浏览器 | MiuiBrowser|XiaoMi | 按常规特征匹配。 |
| 10 | Vivaldi | Vivaldi | 按常规特征匹配。 |
| 11 | Opera | OPR\/|Opera[ /]|OPiOS | 新版 Opera 用 OPR/,老版用 Opera/,两者都带 Chrome 或 Presto 标记。 |
| 12 | Edge | Edg(?:A|iOS)?\/ | Chromium 版 Edge 的 UA 同时含 Chrome 和 Safari,先判 Edge 才不会误报成 Chrome。 |
| 13 | Edge(旧版 EdgeHTML) | Edge\/ | 这是 2020 年之前的 Edge,同样带着 Chrome 和 Safari 标记。 |
| 14 | Internet Explorer | MSIE |Trident\/ | IE11 起 UA 里不再写 MSIE,要靠 Trident 关键字和 rv: 版本号。 |
| 15 | Firefox | Firefox\/|FxiOS\/ | Firefox 的 UA 不含 Chrome 和 Safari,放这里只是为了和 Safari 的兜底区分开。 |
| 16 | Chrome | Chrome\/|CriOS\/|Chromium\/ | 放在所有国产内核和 Edge/Opera 之后,否则会把它们全部吞掉。 |
| 17 | Safari | Safari\/|Version\/.*Mobile | 兜底项:前面都没命中、又带 Safari 标记时才是真 Safari。 |
为什么必须先判 Edge,再判 Chrome
桌面版 Edge 的 UA 长这样:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0。它把 Chrome、Safari 的标记原样抄了一遍,只多了末尾的 Edg/。如果先按 Chrome 匹配,所有 Edge 都会被认成 Chrome。浏览器 UA 的历史就是不断往里追加标记、谁都不敢删的过程,所以规则表必须写成「先具体、后笼统」。
同理,微信(MicroMessenger)、QQ 浏览器(MQQBrowser)、UC(UCBrowser)、百度(baidubrowser)、三星(SamsungBrowser)、华为(HuaweiBrowser)这些国产浏览器的 UA 里都带着 Chrome 和 Safari,必须先判。微信还有两种形态:微信内置浏览器带 MicroMessenger,微信小程序的 webview 也会带,但内嵌的 X5 内核又会在 Chrome 之外额外写 MQQBrowser,所以规则里两者都要覆盖。
User-Agent Reduction 让能拿到的信息越来越少
2022 年起 Chrome 开始推行 UA 缩减:桌面版的次要版本号被冻结(Chrome/126.0.0.0),平台版本也只保留主要版本(Windows NT 10.0 就是 10 及以上),Android 的小版本号同样被砍掉。Safari 也早就把 macOS 版本冻结在 10_15_7。也就是说,靠 UA 精确区分「用户是 Win10 还是 Win11」「macOS 到底是 12 还是 14」已经不可能了。
更现实的做法是用 Client Hints(Sec-CH-UA、Sec-CH-UA-Platform、Navigator.userAgentData),它能给出结构化的品牌、平台和版本,且可以按需申请高熵字段。但 Client Hints 只在 Chromium 系可用,Safari 和 Firefox 至今没有完整实现,所以实践中往往还得 UA 兜底。
不要把 UA 用在关键逻辑上
UA 完全由客户端提供,任何脚本、爬虫、插件都能随便伪造一行。用它做前端适配(比如提示「请升级浏览器」)没问题,但用它做安全判定就是自找麻烦:按 UA 屏蔽爬虫会被一行假 UA 绕过,按 UA 分发不同逻辑会给伪造者开方便之门。真正影响安全或数据正确性的判断应该放在服务端,并对客户端提供的一切信息保持怀疑。
另外 UA 长度和内容都可能被压缩、截断或本地化改写。做统计分析时,看到「其他/未知」比例很高,多半不是因为用户用了怪浏览器,而是自己的规则表没跟上新版本。这份表的规则按 2026 年中的主流浏览器整理,新版本发布后可能需要补充特征串。