User-Agent 解析
User-Agent 解析是一个免费在线的 UA 字符串解析工具:一进页面就显示你当前浏览器的 User-Agent,并把它拆成浏览器、内核、操作系统、设备型号、CPU 架构、是否 App 内置浏览器、是否爬虫等字段;也可以粘贴任意一条 UA 或一整段访问日志批量解析,逐段高亮说明每个片段是什么意思。全程在浏览器本地用规则表匹配,不联网、不上传。
请输入或粘贴一条 User-Agent,也可以直接用上面显示的本机 UA。
正在读取本机浏览器信息…
规则表版本 2026.08(更新于 2026-08)。本页只读 UA 字符串与 Client Hints,不做任何浏览器指纹采集; 规则表随页面打包,全程在你的浏览器里本地匹配,不联网、不上传。本地只保存标签页、示例库是否展开这类视图偏好,
UA 长什么样:一条 Chrome UA 逐段拆开
User-Agent 也叫用户代理字符串,有人写作 User Agent 解析、UserAgent 解析,也有人直接搜 UA 在线解析、 User-Agent 在线解析、UA 查询或者用户代理解析——说的都是同一件事:把这一行字符串拆开看懂。 想知道我的 UA 是什么、我的 User Agent 长什么样、怎么查看浏览器 UA,页面顶部的输入框里已经替你填好了; 浏览器标识查询要的答案,也全在上面那张结果卡里。
UA 字符串结构其实比看上去规整:它是一串「产品标记」加「括号注释」,产品标记形如 名字/版本。 下面这条是最常见的桌面 Chrome UA,我们把它逐段拆开——你会发现真正有信息量的只有两三段,其余全是历史包袱。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36| 片段 | 类型 | 它到底是什么意思 | 有没有信息量 |
|---|---|---|---|
| Mozilla/5.0 | 产品标记 | 历史包袱。上世纪浏览器大战时,服务器只把完整页面发给「Mozilla 兼容」的浏览器,于是所有浏览器都开始自称 Mozilla。今天这一段没有任何信息量,每一条现代 UA 都以它开头。 | 没有 |
| Windows NT 10.0 | 括号里的补充说明 | Windows 的内核版本号,不是你看到的那个系统名。10.0 同时对应 Windows 10 和 Windows 11。 | 有 |
| Win64 | 括号里的补充说明 | 这是一个 64 位的 Windows 系统。 | 有 |
| x64 | 括号里的补充说明 | 64 位的 x86 架构(也写作 x86_64、amd64)。 | 有 |
| AppleWebKit/537.36 | 产品标记 | 固定值,Chromium 系为了兼容而原样保留。**看到 537.36 就判 WebKit 是错的**——Chrome、Edge、Opera 和所有国产 Chromium 壳的真实内核都是 Blink。AppleWebKit 537.36 这个版本号从 2013 年起就没变过。 | 没有 |
| KHTML, like Gecko | 括号里的补充说明 | WebKit 源自 KDE 的 KHTML 排版引擎,这半句是写给当年只认 Gecko 的服务器看的兼容声明。KHTML like Gecko 今天同样没有信息量。 | 没有 |
| Chrome/120.0.0.0 | 产品标记 | Chromium 内核的版本号。从 Chrome 110 起次版本号被统一清零成 x.0.0.0,只有主版本还有意义。 | 有 |
| Safari/537.36 | 产品标记 | Chrome 为兼容保留的尾巴。UA 里的 Safari 是什么?在 Chromium 系 UA 里它什么也不是,纯粹是历史遗留,靠它判断 Safari 一定会把全世界的 Chrome 都算进去。 | 没有 |
最常被问到的四段:Mozilla/5.0 是什么意思——它是浏览器大战留下的兼容声明;AppleWebKit 537.36 是 Chromium 系原样保留的固定值,看到它就判 WebKit 是错的;KHTML like Gecko 同样是写给老服务器看的兼容话术;而 UA 里的 Safari 是什么, 答案是——在 Chrome 的 UA 里它什么也不是。想自己写正则去匹配这些片段,可以去 正则测试器 上先试;想看请求返回了什么状态码,去 HTTP 状态码查询。
五个最容易看错的 UA 片段
Windows NT 10.0 是 Win10 还是 Win11
都不是——准确说,UA 分不出来。微软从 Windows 11 起就没有再改这个内核版本号,两代系统上报的 UA 完全一样。要区分只有一条路:Client Hints 的 platformVersion,主版本号大于等于 13 才是 Windows 11。本页在拿到 Client Hints 时会自动把结论从「10/11」升级为确定值,拿不到时就老老实实写「10/11」。 完整的 Windows NT 版本号对照见下表。
| UA 里的写法 | 对应的 Windows 版本 |
|---|---|
| Windows NT 3.1 | Windows NT 3.1 |
| Windows NT 4.0 | Windows NT 4.0 |
| Windows NT 5.0 | Windows 2000 |
| Windows NT 5.1 | Windows XP |
| Windows NT 5.2 | Windows XP x64 / Server 2003 |
| Windows NT 6.0 | Windows Vista |
| Windows NT 6.1 | Windows 7 |
| Windows NT 6.2 | Windows 8 |
| Windows NT 6.3 | Windows 8.1 |
| Windows NT 10.0 | Windows 10/11 |
Android 10 与型号 K 都是占位值
搜索 Android 10 K UA 的人,多半是在自家日志里看到了成片的这条记录。这是 Chrome UA 缩减的结果:从 Chrome 110 起,移动端固定上报 Android 10、型号固定写成 K,桌面端则把次版本号统一清零成 x.0.0.0。这就是所谓的 UA 版本冻结,它不是 bug,是 Chromium 出于隐私考虑的设计。要拿到真实的系统 版本与机型,只能走 Client Hints 的 platformVersion 与 model。
Mac OS X 10_15_7 为什么一直不变
从 macOS 11 Big Sur 起,Safari 与 Chrome 都不再上报真实系统版本,一律写死成 10_15_7。 所以你在日志里看到一大片 Mac OS X 10_15_7,并不代表这些人还在用 Catalina。
iPad UA 显示 Macintosh 是桌面模式
iPadOS 13 起默认「请求桌面网站」,此时 iPad 的 UA 与一台真 Mac 逐字符相同。本机模式下我们会额外看一眼 maxTouchPoints——一台 Mac 通常是 0,iPad 是 5——但只拿到一条别人的 UA 字符串时,这两者无法区分, 这时本页会明写「无法区分」而不是猜一个结论给你。
UA 里的 wv 是什么:这是 Android WebView
Android WebView UA 的标志就是括号里那个孤零零的 wv。它表示页面跑在 App 内嵌的浏览器控件里, 不是独立的 Chrome:文件下载、自动播放、部分 Web API 的行为都可能不一样。顺带一提,iOS Chrome 内核和 Safari 完全一样,Apple 的平台规则要求 iOS 上所有浏览器都用系统的 WebKit,CriOS 与 FxiOS 区分的只是外壳。
怎么用 UA 判断访客是手机还是电脑
先给结论:想用 UA 判断手机还是电脑,只该看它有没有 Mobile 这一段,别去匹配机型。 UA 里的 Mobile 是什么意思——它就是「这是一台手机」的唯一声明。安卓平板 UA 里恰恰没有这一段, 所以带 Mobile 判手机、不带判平板;苹果那边简单些,UA 里直接写着 iPhone 或者 iPad。
举个能自己复现的例子。把下面第一条贴进页首的输入框,设备类型判断的结果是「平板」,品牌 Samsung、型号 SM-X710; 第二条只在结尾多了 Mobile 这 6 个字母,结果就变成「手机」,其余部分一字未动。
Mozilla/5.0 (Linux; Android 13; SM-X710) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36Mozilla/5.0 (Linux; Android 13; SM-X710) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36本页的 UA 判断设备类型走的是固定顺序:先认爬虫,再认电视、游戏主机与苹果设备(安卓电视该算电视,不能算手机), 然后才轮到安卓那条 Mobile 线索,最后落到下面这张通用规则表。表里第二列是判定规则的原文,没有第二套:
| 判成什么设备 | UA 里命中的片段(判定规则原文) | 品牌 / 型号 |
|---|---|---|
| 平板 | iPad | Apple iPad |
| 手机 | iPhone | Apple iPhone |
| 手机 | iPod | Apple iPod touch |
| 可穿戴设备 | Apple Watch|Watch OS|WatchOS | Apple Watch |
| 游戏主机 | PlayStation \d | Sony |
| 游戏主机 | Xbox | Microsoft |
| 游戏主机 | Nintendo (?:Switch|WiiU|3DS) | Nintendo |
| 电视 / 大屏 | SMART-TV|SmartTV|HbbTV|GoogleTV|Android TV|AFT[A-Z]{1,6}|Roku|BRAVIA|Web0S|NetCast | — |
| 桌面端 | Macintosh | Apple Mac |
| 桌面端 | Windows NT|Windows (?:95|98|ME) | — |
| 桌面端 | CrOS | — |
| 手机 | KAIOS | — |
| 电视 / 大屏 | Tizen | — |
| 嵌入式设备 | RaspberryPi|Raspbian | — |
| 桌面端 | X11|Linux|FreeBSD|OpenBSD|NetBSD | — |
App 内置浏览器标记速查表
App 内置浏览器判断在国内是最高频的需求:微信内置浏览器 UA 里有 MicroMessenger, 支付宝内置浏览器 UA 里有 AlipayClient,钉钉 UA 里有 DingTalk, 抖音内置浏览器 UA 里有 aweme 或 BytedanceWebview。 判断是否微信打开就查 MicroMessenger UA 这一段;企业微信要再看 wxwork, 小程序 WebView UA 会额外带一段 miniProgram。本页收录 26 个 App 的标记:
| App | UA 里的关键片段 | 备注 |
|---|---|---|
| 企业微信 | wxwork/4.1.6 | 企业微信的 UA 里同时带 MicroMessenger 和 wxwork,只看 MicroMessenger 会把它误判成个人微信。 |
| 微信 | MicroMessenger/8.0.44 | 判断网页是不是在微信里打开,查的就是 MicroMessenger;小程序 WebView 会再多一个 miniProgram。 |
| 支付宝 | AlipayClient/10.5.36 | — |
| 钉钉 | DingTalk/7.0.30 | — |
| 飞书 | Lark/7.10.0 | — |
| QQ/8.9.75 | 注意前面那个空格:MQQBrowser 是独立的 QQ 浏览器,只有 空格 + QQ/ 才是 QQ App 里的内置浏览器。 | |
| 微博 | __weibo__14.6.0__ | — |
| 小红书 | xhsdiscover/8.20.0 | — |
| 今日头条 | NewsArticle/8.5.0 | 今日头条和抖音都带 BytedanceWebview,靠 NewsArticle 才能把两者分开。 |
| 抖音 | aweme_v1 / BytedanceWebview | — |
| 快手 | KuaiShou/11.5.30 | — |
| 百度 App | baiduboxapp/13.30 | — |
| 手机淘宝 | AliApp(TB/10.30.0) | — |
| 天猫 | AliApp(TM/10.30.0) | — |
| 闲鱼 | AliApp(WX/7.10.0) | — |
| 京东 | jdapp;iPhone;10.3.4 | — |
| 美团 | meituangroup / meituan/11.20 | — |
| 大众点评 | dianpingnova/12.5.0 | — |
| 哔哩哔哩 | BiliApp/7.50.0 | — |
| 知乎 | Zhihu/9.40.0 | — |
| 拼多多 | pinduoduo / PDDOpenSDK | — |
| 携程 | CtripWireless | — |
| 豆瓣 | com.douban.frodo | — |
| FBAN/FBIOS FBAV/440.0 | — | |
| Instagram 310.0.0 | — | |
| LINE | Line/13.20.0 | — |
爬虫 UA 速查表:Googlebot 与 GPTBot 怎么认
爬虫 UA 识别的难点不在正则,而在归属:Bytespider 是什么?很多人以为是搜索引擎爬虫,其实它是字节跳动抓大模型 训练语料的 AI 爬虫 UA,而且套着一层完整的 Chrome 移动端外壳。判断是不是爬虫时还要注意, Googlebot UA、Baiduspider UA 这类名字和 robots.txt 里该写的 token 常常并不一致。本页收录 72 条规则:
搜索引擎(22 条)
| 名称 | UA 里的关键片段 | 运营者 | robots.txt 里写什么 |
|---|---|---|---|
| Googlebot-Image | Googlebot-Image | Googlebot-Image | |
| Googlebot-News | Googlebot-News | Googlebot-News | |
| Googlebot-Video | Googlebot-Video | Googlebot-Video | |
| AdsBot-Google | AdsBot-Google | AdsBot-Google | |
| Mediapartners-Google | Mediapartners-Google | Mediapartners-Google | |
| Google-InspectionTool | Google-InspectionTool | Google-InspectionTool | |
| Storebot-Google | Storebot-Google | Storebot-Google | |
| Googlebot | Googlebot/2.1 | Googlebot | |
| Baiduspider-render | Baiduspider-render | 百度 | Baiduspider-render |
| Baiduspider | Baiduspider/2.0 | 百度 | Baiduspider |
| bingbot | bingbot/2.0 | Microsoft | bingbot |
| adidxbot | adidxbot | Microsoft | adidxbot |
| Sogou web spider | Sogou web spider/4.0 | 搜狗 | Sogou web spider |
| 360Spider | 360Spider | 360 | 360Spider |
| HaosouSpider | HaosouSpider | 360 | HaosouSpider |
| YisouSpider | YisouSpider | 神马搜索(UC / 阿里) | YisouSpider |
| PetalBot | PetalBot | 华为(花瓣搜索) | PetalBot |
| YandexBot | YandexBot/3.0 | Yandex | YandexBot |
| DuckDuckBot | DuckDuckBot | DuckDuckGo | DuckDuckBot |
| Slurp | Slurp | Yahoo | Slurp |
| Applebot | Applebot/0.1 | Apple | Applebot |
| Yeti | Yeti/1.1 | NAVER | Yeti |
AI 爬虫(15 条)
| 名称 | UA 里的关键片段 | 运营者 | robots.txt 里写什么 |
|---|---|---|---|
| GPTBot | GPTBot/1.2 | OpenAI | GPTBot |
| ChatGPT-User | ChatGPT-User/1.0 | OpenAI | ChatGPT-User |
| OAI-SearchBot | OAI-SearchBot/1.0 | OpenAI | OAI-SearchBot |
| ClaudeBot | ClaudeBot/1.0 | Anthropic | ClaudeBot |
| Claude-User | Claude-User/1.0 | Anthropic | Claude-User |
| Claude-Web | Claude-Web | Anthropic | Claude-Web |
| anthropic-ai | anthropic-ai | Anthropic | anthropic-ai |
| PerplexityBot | PerplexityBot/1.0 | Perplexity | PerplexityBot |
| Perplexity-User | Perplexity-User/1.0 | Perplexity | Perplexity-User |
| Bytespider | Bytespider | 字节跳动 | Bytespider |
| CCBot | CCBot/2.0 | Common Crawl | CCBot |
| Amazonbot | Amazonbot/0.1 | Amazon | Amazonbot |
| meta-externalagent | meta-externalagent/1.1 | Meta | meta-externalagent |
| cohere-ai | cohere-ai | Cohere | cohere-ai |
| Diffbot | Diffbot | Diffbot | Diffbot |
社交抓取(10 条)
| 名称 | UA 里的关键片段 | 运营者 | robots.txt 里写什么 |
|---|---|---|---|
| facebookexternalhit | facebookexternalhit/1.1 | Meta | facebookexternalhit |
| facebookcatalog | facebookcatalog/1.0 | Meta | facebookcatalog |
| Twitterbot | Twitterbot/1.0 | X(原 Twitter) | Twitterbot |
| LinkedInBot | LinkedInBot/1.0 | LinkedInBot | |
| Slackbot | Slackbot-LinkExpanding | Slack | Slackbot |
| WhatsApp/2.23 | Meta | ||
| TelegramBot | TelegramBot | Telegram | TelegramBot |
| Discordbot | Discordbot/2.0 | Discord | Discordbot |
| Pinterestbot | Pinterestbot/1.0 | Pinterestbot | |
| redditbot | redditbot/1.0 | redditbot |
SEO 工具(7 条)
| 名称 | UA 里的关键片段 | 运营者 | robots.txt 里写什么 |
|---|---|---|---|
| AhrefsBot | AhrefsBot/7.0 | Ahrefs | AhrefsBot |
| SemrushBot | SemrushBot/7 | Semrush | SemrushBot |
| MJ12bot | MJ12bot/v1.4.8 | Majestic | MJ12bot |
| DotBot | DotBot/1.2 | Moz | DotBot |
| rogerbot | rogerbot/1.0 | Moz | rogerbot |
| BLEXBot | BLEXBot/1.0 | WebMeUp | BLEXBot |
| Screaming Frog SEO Spider | Screaming Frog SEO Spider/19.0 | Screaming Frog | Screaming Frog SEO Spider |
HTTP 客户端(15 条)
| 名称 | UA 里的关键片段 | 运营者 | robots.txt 里写什么 |
|---|---|---|---|
| curl | curl/8.4.0 | curl 项目 | curl |
| Wget | Wget/1.21 | GNU | Wget |
| python-requests | python-requests/2.31.0 | Python requests | python-requests |
| Python-urllib | Python-urllib/3.11 | Python 标准库 | Python-urllib |
| aiohttp | Python/3.11 aiohttp/3.9.1 | aio-libs | aiohttp |
| Go-http-client | Go-http-client/1.1 | Go 标准库 | Go-http-client |
| okhttp | okhttp/4.12.0 | Square | okhttp |
| PostmanRuntime | PostmanRuntime/7.36.0 | Postman | PostmanRuntime |
| Java | Java/17.0.9 | JDK | Java |
| Apache-HttpClient | Apache-HttpClient/5.3 | Apache | Apache-HttpClient |
| Dalvik | Dalvik/2.1.0 | Android 运行时 | Dalvik |
| axios | axios/1.6.2 | axios | axios |
| node-fetch | node-fetch/1.0 | node-fetch | node-fetch |
| GuzzleHttp | GuzzleHttp/7 | Guzzle | GuzzleHttp |
| libwww-perl | libwww-perl/6.72 | Perl LWP | libwww-perl |
自动化环境(3 条)
| 名称 | UA 里的关键片段 | 运营者 | robots.txt 里写什么 |
|---|---|---|---|
| Chrome(无头模式) | HeadlessChrome/120.0.0.0 | Chromium | HeadlessChrome |
| Chrome-Lighthouse | Chrome-Lighthouse | Chrome-Lighthouse | |
| PhantomJS | PhantomJS/2.1.1 | PhantomJS | PhantomJS |
浏览器与内核对照表:从 UA 反推渲染内核
这张表的顺序就是本页的判断顺序,而且顺序本身就是正确性:Edge、Opera 和所有国产 Chromium 壳的 UA 里都带着 Chrome/,谁排在前面谁说了算。表里一共 39 条规则,内核一列是按浏览器反推得到的,不是看 AppleWebKit 猜的。
| 浏览器 | UA 里的关键片段 | 渲染内核 |
|---|---|---|
| Edge | Edg/120.0.0.0 | Blink(Chromium 系) |
| Edge(Android) | EdgA/120.0.0.0 | Blink(Chromium 系) |
| Edge(iOS) | EdgiOS/120.0.0.0 | WebKit(Safari 与 iOS 全部浏览器) |
| Edge(旧版) | Edge/18.19041 | EdgeHTML(旧版 Edge) |
| Opera | OPR/106.0.0.0 | Blink(Chromium 系) |
| Opera(iOS) | OPiOS/16.0 | WebKit(Safari 与 iOS 全部浏览器) |
| Opera Mini | Opera Mini/7.6 | Presto(2013 年前的 Opera) |
| Opera(Presto 时代) | Opera/9.80 … Presto/2.12 | Presto(2013 年前的 Opera) |
| Vivaldi | Vivaldi/6.5 | Blink(Chromium 系) |
| Brave | Brave/1.62 | Blink(Chromium 系) |
| Arc | Arc/1.30 | Blink(Chromium 系) |
| Samsung Internet | SamsungBrowser/23.0 | Blink(Chromium 系) |
| 华为浏览器 | HuaweiBrowser/14.0 | Blink(Chromium 系) |
| OPPO 浏览器 | HeyTapBrowser/45.0 | Blink(Chromium 系) |
| vivo 浏览器 | VivoBrowser/8.0 | Blink(Chromium 系) |
| 小米浏览器 | MiuiBrowser/17.0 | Blink(Chromium 系) |
| 荣耀浏览器 | HONORBrowser/8.0 | Blink(Chromium 系) |
| QQ 浏览器 | MQQBrowser/13.0 / QQBrowser/12.0 | Blink(Chromium 系) |
| 夸克浏览器 | Quark/6.9.0 | Blink(Chromium 系) |
| UC 浏览器 | UCBrowser/15.5 / UBrowser/7.0 | Blink(Chromium 系) |
| 搜狗浏览器 | MetaSr 1.0 | Blink(Chromium 系) |
| 猎豹浏览器 | LBBROWSER | Blink(Chromium 系) |
| 傲游浏览器 | Maxthon/7.1 | Blink(Chromium 系) |
| 2345 浏览器 | 2345Explorer/10.0 | Blink(Chromium 系) |
| 世界之窗浏览器 | TheWorld 7 | Blink(Chromium 系) |
| 360 浏览器 | QihooBrowser/13.1.1 / 360SE 6.0 | Blink(Chromium 系) |
| Yandex 浏览器 | YaBrowser/24.1 | Blink(Chromium 系) |
| Amazon Silk | Silk/119.0 | Blink(Chromium 系) |
| Chrome(iOS) | CriOS/120.0.0.0 | WebKit(Safari 与 iOS 全部浏览器) |
| Firefox(iOS) | FxiOS/120.0 | WebKit(Safari 与 iOS 全部浏览器) |
| Firefox | Firefox/121.0 | Gecko(Firefox) |
| Chrome(无头模式) | HeadlessChrome/120.0.0.0 | Blink(Chromium 系) |
| Electron 应用 | Electron/28.0.0 | Blink(Chromium 系) |
| Chromium | Chromium/120.0.0.0 | Blink(Chromium 系) |
| Chrome | Chrome/120.0.0.0 | Blink(Chromium 系) |
| Android 浏览器(旧版) | Android 4.4.2; … Version/4.0 Mobile Safari/534.30 | WebKit(Safari 与 iOS 全部浏览器) |
| Safari | Version/17.4 Safari/605.1.15 | WebKit(Safari 与 iOS 全部浏览器) |
| Internet Explorer | MSIE 8.0; Trident/4.0 | Trident(Internet Explorer) |
| Internet Explorer 11 | Trident/7.0; rv:11.0 | Trident(Internet Explorer) |
批量解析访问日志:Nginx 日志 UA 统计怎么做
想做 Nginx 日志 UA 统计、看访问日志浏览器占比,直接把日志整段贴进「粘贴 / 日志批量解析」即可。UA 批量解析支持 下面五种行格式,每一条都是写死的规则——识别不出来的行一律跳过,绝不做兜底猜测, 因为日志一行里到处都是数字和引号,猜一次就会污染整张报表。
| 行格式 | 示例 | 提取规则 |
|---|---|---|
| Nginx / Apache 访问日志 | 1.2.3.4 - - [26/Aug/2026:10:00:00 +0800] "GET / HTTP/1.1" 200 1234 "https://ref.example" "Mozilla/5.0 ... Chrome/120.0.0.0 Safari/537.36" | 取**最后一个**成对双引号字段:referer 在前、UA 在后。字段是 - 或太短则当作没有 UA。 |
| HTTP 请求头 | User-Agent: Mozilla/5.0 ... Chrome/120.0.0.0 Safari/537.36 | 行首的 User-Agent: 之后全部当成 UA,半角与全角冒号都认。 |
| curl 命令 | curl -A "Mozilla/5.0 ... Chrome/120.0.0.0" https://example.com | 取 -A 或 --user-agent 后面的引号串。 |
| 整行一对引号 | "Mozilla/5.0 ... Chrome/120.0.0.0 Safari/537.36" | 整行就是一条被引号包住的 UA,去掉引号即可。 |
| 裸 UA 行 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... Chrome/120.0.0.0 Safari/537.36 | 以 Mozilla/、Opera/、curl/、python-requests/ 等已知前缀或已知爬虫名开头的整行。 |
同一行日志里,除了 UA 还有一个常被一起分析的字段——行首那个客户端地址。它是公网地址还是内网代理、 前面挂了几层反代、X-Forwarded-For 里该取哪一个,是另一件事,把同一段日志再贴一份到 IP 地址查询 就能逐条拆开并按 /24 聚合。 一个答「访客用的什么浏览器」,一个答「访客从哪个网段来」。
别再用 UA 判断浏览器:更靠谱的三种做法
如果你是因为「UA 判断浏览器不准」找到这里的,那答案很直接:UA 本来就不该用来做判断。 它是客户端自报的一行字符串,可以被任意修改,而且各家为了兼容互相抄了二十多年,早已不能反映真实能力。 下面三种做法都比解析 UA 可靠:
- 特性检测:你关心的从来不是「这是不是 Safari」,而是「它支不支持这个 API」。直接
if (window.showOpenFilePicker)这样判断,浏览器换代了你的代码也不用改。 - Client Hints:前端读
navigator.userAgentData,服务端用Sec-CH-UA系列响应头协商。低熵字段(品牌、是否移动端、平台)默认就能拿到, 平台版本、机型、架构这些高熵字段需要显式索取。它也是唯一能定死 Win10 / Win11 的路径。 - 响应式 CSS 与渐进增强:屏幕宽度、指针类型、是否支持悬停,全都有对应的媒体查询, 比按机型分支稳得多。
隐私说明:User-Agent 解析工具安全吗
本页只读两样东西:UA 字符串本身,以及浏览器主动提供的 Client Hints;为了辅助判断 iPad 桌面模式, 还会读一个 maxTouchPoints。除此之外,不读 canvas、不读 WebGL、不读字体列表、不读音频指纹、 不读时区与电池,也不生成任何指纹 ID——本页是 UA 解析工具,不是指纹检测站。
规则表随页面一起打包,全部匹配都在你的浏览器里完成,不联网、不上传,你粘贴的 UA 与日志原文不会出现在任何请求里。 本地只保存标签页、示例库是否展开这类视图偏好,页脚有一键清除。规则表版本 2026.08,更新于 2026-08,每季度复核一次。
如何使用User-Agent 解析
打开页面即可看到本机 User-Agent 与完整解析结果,无需任何点击;点结果卡里的字段能高亮 UA 原文里对应的片段。
要查别人的 UA,把它粘进输入框;粘贴多行内容会自动切到「粘贴 / 日志批量解析」,Nginx 访问日志、User-Agent 请求头、curl 命令都能逐行识别。
结果可以复制成一句话摘要或 TSV,批量结果还能下载成带 BOM 的 .tsv;点「复制深链」能把一条待查 UA 直接发给同事。
关于User-Agent 解析的常见问题
- User-Agent 是什么?它里面到底写了些什么
- User-Agent 是浏览器在每次请求时自报家门的一行字符串,服务器靠它大致判断对方是什么客户端。它的结构是若干个「产品标记」加「括号注释」,产品标记形如 名字/版本,括号里则用分号隔开操作系统、设备型号、架构这些补充信息。一条典型的桌面 Chrome UA 大致包含四部分:开头的 Mozilla/5.0 兼容声明、括号里的系统与架构、中间的内核标记 AppleWebKit 与 KHTML like Gecko、末尾的浏览器版本与 Safari 兼容尾巴。要特别记住的是,这一整行都由客户端自己填写,可以被任意修改,所以它只能用于统计与兼容适配,不能当作可信身份。
- 怎么查看我自己浏览器的 User-Agent
- 最快的办法就是打开本页:页面加载完成后输入框里显示的就是你的 User-Agent,下面同时给出浏览器、内核、系统、设备型号的完整解析。如果你想在控制台里看,按 F12 打开开发者工具,在 Console 里输入 navigator.userAgent 回车即可;手机上同理,用支持远程调试的浏览器或者直接打开本页都可以。想查看我的浏览器版本时要注意,Chrome 从 110 版起把次版本号统一清零成 x.0.0.0,UA 里只有主版本还有意义,要拿到完整版本号得看 chrome://version 或者 Client Hints 的 fullVersionList。
- Windows NT 10.0 是 Win10 还是 Win11,UA 能分清吗
- 分不清。微软从 Windows 11 起没有修改这个内核版本号,Win10 和 Win11 上报的 UA 完全一样,都是 Windows NT 10.0,所以任何只看 UA 的工具都不可能给出准确答案——号称能分的多半是在猜。唯一可靠的路径是 User-Agent Client Hints:浏览器提供的 platformVersion 字段,主版本号为 0 表示 Windows 7 或 8 系列,1 到 12 表示 Windows 10,大于等于 13 才是 Windows 11。本页在你自己的浏览器上支持 Client Hints 时会自动用它把结论定死,拿不到时就如实写成 10/11,不猜一个看起来更好看的答案。
- UA 里的 Android 10 和型号 K 是什么意思
- 它们是 Chrome UA 缩减之后的占位值,不是真实的系统版本与机型。从 Chrome 110 起,Chromium 在移动端把系统版本固定上报为 Android 10、把设备型号固定写成字母 K,目的是减少可用于指纹追踪的信息量。所以你在访问日志里看到成片的 Android 10 和 K,并不代表这些用户真的还在用 Android 10,也不代表他们的手机型号叫 K。要拿到真实值只有一条路:Client Hints 的 platformVersion 与 model 两个高熵字段,而且需要页面显式索取、用户浏览器同意提供。本页遇到这两个占位值时会明确标出「不是真实系统与型号」。
- 安卓平板和手机的 UA 有什么区别
- 只差一个 Mobile 标记。安卓 UA 里带 Mobile 的判成手机,不带的判成平板,这是整条字符串里唯一可用的线索——型号那一段指望不上,它既可能是 SM-X710 这样的真机型,也可能是 Chrome 缩减后的占位字母 K。你可以自己验一遍:把 Android 13; SM-X710 那条 UA 贴进页首输入框,设备类型是平板;把结尾的 Chrome/120.0.0.0 Safari 改成 Chrome/120.0.0.0 Mobile Safari,同一条 UA 就变成手机。所以做移动端适配时该判的是有没有 Mobile,而不是去匹配机型清单。
- 为什么 Chrome 的 UA 里会有 Safari 和 AppleWebKit
- 纯粹是历史兼容。当年 Safari 用 WebKit 内核,为了让只认 WebKit 的网站正常返回页面,Chrome 在 UA 里原样保留了 AppleWebKit 与结尾的 Safari 两段;后来 Chromium 换成自研的 Blink 内核,这两段也没有删掉,反而被 Edge、Opera 和所有国产 Chromium 浏览器一起继承了下来。结论是:看到 AppleWebKit/537.36 就判定内核是 WebKit 是错的,537.36 从 2013 年起就是个不再变化的固定值;看到结尾的 Safari/537.36 就以为是 Safari 更是错的,那样统计出来的 Safari 份额里全是 Chrome。正确的做法是按浏览器名反推内核,本页就是这么做的。
- Edge 和 Opera 的 UA 里为什么也有 Chrome
- 因为它们都用 Chromium 内核,UA 里原样留着 Chrome/ 版本段,好让那些按 Chrome 判断的老网站正常发页面。区分靠各自的专属标记:Edge UA 结尾另加 Edg/(没有 e),Opera UA 加 OPR/,国产浏览器 UA 则各自带 QQBrowser、UCBrowser、MiuiBrowser、Quark 这类片段。这里有个统计上的坑:做浏览器份额统计时只 grep Chrome/,Edge、Opera 和所有 Chromium 壳都会被算进 Chrome,份额明显虚高。正确做法是让专属标记排在 Chrome 前面先匹配,本页的浏览器与内核对照表顺序就是判断顺序。
- 怎么判断网页是不是在微信内置浏览器里打开的
- 查 UA 里有没有 MicroMessenger 这一段,有就是微信内置浏览器,紧跟在斜杠后面的是微信版本号。有两个容易漏的分支:企业微信的 UA 里同时带 MicroMessenger 和 wxwork,只看前者会把企业微信误判成个人微信;小程序 WebView 会额外带一段 miniProgram,能借此区分是从聊天窗口打开的网页还是小程序里的内嵌页。要提醒的是,这个判断只适合做界面适配,比如提示用户点右上角在浏览器中打开、或者隐藏微信里不支持的下载按钮,绝对不能拿它当权限判断——UA 是客户端自己填的,那几个字符谁都能加上去。
- iPad 的 UA 为什么显示成 Macintosh 和 Mac OS X
- 因为 iPadOS 13 起默认开启了「请求桌面网站」,此时 Safari 上报的 UA 与一台真正的 Mac 逐字符相同,里面既没有 iPad 也没有 iOS。这是 Apple 有意为之,目的是让 iPad 拿到桌面版页面而不是缩水的移动版。纯靠 UA 字符串无解,只能借助一个旁证:在浏览器里读 navigator.maxTouchPoints,Mac 通常返回 0,iPad 返回 5。本页在解析你自己的浏览器时会用上这个旁证并给出提示;但当你粘贴的是别人的一条 UA 时,我们拿不到这个值,就会如实写「无法区分」,而不是替你猜一个结论。
- Mac OS X 10_15_7 为什么一直不变
- 这是 Apple 从 macOS 11 Big Sur 起做的版本号冻结:无论你实际用的是 macOS 12、13 还是 14,Safari 与 Chrome 在 UA 里都固定上报 Mac OS X 10_15_7。原因有两个,一是减少可用于指纹追踪的熵,二是避免老网站因为看到不认识的版本号而拒绝服务——毕竟这些网站的判断逻辑往往写死了 10 开头。所以你在日志里看到一大片 10_15_7,不代表这些人还停留在 Catalina,只能说明他们用的是 macOS 11 或更新的版本。要拿到真实系统版本,同样得靠 Client Hints 的 platformVersion。
- iOS 上的 Chrome 和 Safari 内核一样吗
- 一样,都是系统提供的 WebKit。Apple 的 App Store 规则长期要求 iOS 上的所有浏览器都必须使用系统的 WebKit 引擎,所谓的 iOS 版 Chrome、Firefox、Edge、Opera 都只是外壳,渲染与 JavaScript 执行全部交给 WebKit。它们在 UA 里各自加了自己的标记用于区分外壳:Chrome 是 CriOS,Firefox 是 FxiOS,Edge 是 EdgiOS,Opera 是 OPiOS。这件事的实际影响是:当你在 iOS 上遇到渲染问题时,应该按 Safari 的版本去排查兼容性,而不是按 Chrome 的版本;本页解析到这几个标记时会把内核如实标成 WebKit 并给出提示。
- Bytespider、GPTBot 这些爬虫 UA 是谁家的
- Bytespider 是字节跳动的爬虫,抓的是大模型训练语料而不是搜索索引,很多人误以为它是搜索引擎;它还常常套着完整的 Chrome 移动端外壳,只在末尾露出名字。GPTBot 与 ChatGPT-User 都属于 OpenAI,但它们是两个不同的 robots.txt token:前者用于训练语料抓取,后者是用户在对话里点开链接时的实时取页,屏蔽一个不等于屏蔽另一个。ClaudeBot 属于 Anthropic,PerplexityBot 属于 Perplexity,CCBot 属于 Common Crawl。还有一类容易被忽略:Google-Extended 与 Applebot-Extended 只存在于 robots.txt 配置里,永远不会出现在 UA 中,在访问日志里 grep 它们一条都搜不到。
- 怎么从 Nginx 访问日志里统计浏览器占比
- 把日志整段贴进本页的「粘贴 / 日志批量解析」即可,会逐行提取 UA 并输出浏览器、系统、设备类型三张占比表以及爬虫比例。提取规则是写死的:对 combined 格式的日志,取一行里最后一个成对双引号字段——因为 referer 在前、UA 在后,用一个笼统的正则一把梭会把两者连成一段;该字段等于减号或者太短就当作没有 UA 直接跳过。除了日志行,裸 UA 行、User-Agent 请求头行、curl 命令行、整行被引号包住的 UA 也都能识别。要特别注意占比口径:分母是成功提取出 UA 的行数,不是日志总行数,跳过了多少行会单独显示,不会被悄悄算进分母里。
- User-Agent 可以伪造吗?能用它做安全判断吗
- 可以随意伪造,因此绝对不能用来做安全判断。改一下浏览器的开发者工具设置、给请求加一行 header、写三行 curl 脚本,都能把 UA 变成任何样子,包括伪装成 Googlebot。它合理的用途只有两类:一是流量统计,看看用户大致分布在哪些浏览器与系统上,用于决定兼容性支持范围;二是界面适配,比如在 App 内置浏览器里提示用户到外部浏览器打开。反过来,鉴权、风控、付费墙、访问控制、按 UA 放行爬虫,这些全都是错误用法——真要识别搜索引擎爬虫,正确做法是对来源 IP 做反向 DNS 校验,而不是信 UA 里那几个字。
- Client Hints 是什么?会取代 User-Agent 吗
- User-Agent Client Hints 是 Chromium 推动的替代方案:把原本塞在一行字符串里的信息拆成一组按需索取的字段。低熵部分(浏览器品牌列表、是否移动端、平台名)默认就能拿到,前端读 navigator.userAgentData,服务端看 Sec-CH-UA 系列请求头;高熵部分(平台版本、机型、架构、位数、完整版本号)需要显式索取,浏览器可以拒绝。它的品牌列表里会混入一个故意乱码的假品牌用来防止开发者写死列表,本页会自动把它过滤掉。短期内 UA 字符串不会消失——太多老系统依赖它——但它携带的信息会持续缩减,新代码应该优先用特性检测与 Client Hints。
- 为什么每条 UA 都以 Mozilla/5.0 开头
- 这是九十年代浏览器大战留下的疤。当时 Netscape Navigator 的产品名是 Mozilla,很多网站会检查 UA,只把带框架的完整页面发给 Mozilla 兼容的浏览器;后来的 IE 为了拿到同样的页面,就在 UA 里自称 Mozilla 并把自己的信息塞进括号注释里,再后来 Safari、Chrome、Firefox 全都照抄了这个做法。于是今天几乎每一条浏览器 UA 都以 Mozilla/5.0 开头,而这一段没有任何信息量——它既不代表 Mozilla 的产品,也不代表任何版本。真正能区分浏览器的信息全在后面的产品标记里。
- 这个 User-Agent 解析工具会上传我的数据吗
- 不会。规则表随页面一起打包下发,所有匹配都在你的浏览器里本地完成,你输入或粘贴的 UA、访问日志原文不会出现在任何网络请求的地址或请求体里。本页也不做任何浏览器指纹采集:只读 UA 字符串本身、浏览器主动提供的 Client Hints,以及一个用于辅助判断 iPad 桌面模式的 maxTouchPoints,不读 canvas、不读 WebGL、不读字体列表、不读音频指纹、不读时区与电池,也不生成任何指纹 ID。本地存储里只有标签页、示例库是否展开这类视图偏好,页脚有一键清除按钮,随时可以清空。
- Android WebView 的 UA 有什么特征
- 最明显的特征是括号里那个孤零零的 wv 标记,形如 Linux; Android 13; wv; Pixel 7,表示页面跑在 App 内嵌的 WebView 控件里而不是独立的 Chrome。老一些的 WebView 还会带一段 Version/4.0,那是 Android 4.x 时代系统浏览器留下的写法。识别出 WebView 有实际意义:它和外部 Chrome 在文件下载、视频自动播放、剪贴板、部分新 Web API 上的行为都可能不同,某些 API 还依赖宿主 App 的配置是否开启。另外要注意 wv 只是一个普通片段,解析时不能把它当成设备型号——本页的型号提取会显式剔除 wv、语言代码和 Build 尾巴。
- 手机浏览器的 User-Agent 怎么查看
- 用手机浏览器直接打开本页,输入框里就是这台手机当前的 User-Agent,下面同时给出浏览器、系统版本、设备型号与是否 App 内置浏览器,长按即可复制。手机上没有开发者工具,控制台里敲 navigator.userAgent 那条路走不通,本页就是替代方案,窄屏下结果卡与速查表都可以横向滑动查看。要留意两点:从微信、抖音这类 App 里点开的链接跑在内置浏览器中,UA 会多出 MicroMessenger 这类标记,和你手机上独立的 Chrome 不是同一条;iPhone 上所有浏览器共用系统 WebKit,UA 里的 CriOS 只说明外壳是 Chrome。
- UA 批量解析一次最多能贴多少行日志
- 一次最多 5 万行、200 万字符,超出部分会被截断并在结果上方明确提示,不会悄悄丢掉。单条 UA 超过 2048 个字符同样会截断并在该行标出截断标记——正常 UA 都在 200 字符以内,会超的基本是被拼接坏了的日志行。结果表默认只渲染前 200 行以免长列表卡顿,这个数字可以在页面上改到 2000;但复制 TSV 与下载 .tsv 走的都是完整数据,不受渲染上限影响。超过 2000 行时解析自动切到分片模式,带进度条并可随时取消。
- 下载的 UA 解析结果用 Excel 打开会中文乱码吗
- 不会。下载的 .tsv 文件带 UTF-8 BOM,用 Excel 或 WPS 双击直接打开,中文 UA 与中文爬虫名都能正常显示。如果你用的是「复制 TSV」再粘进表格,走的是剪贴板、不涉及文件编码,同样不会乱码;反过来,别处导出的日志在 Excel 里乱码,多半是 UTF-8 无 BOM 被当成 GBK 读取,重新用本页导出即可。还有一点值得提前知道:UA 原文里以等号、加号、减号、@ 开头的内容会被自动前置一个英文单引号再写入,这是防止表格软件把它当公式执行,不是解析结果出错。
- User-Agent 解析工具免费吗,需要注册吗
- 完全免费,不需要注册、不需要下载客户端,也没有次数限制。规则表随页面一起打包下发,全部解析都在你的浏览器里本地完成,我们这边既没有按次产生的服务器成本,也拿不到你的数据,自然不必用登录或配额来限制你。页面里预留的广告位当前是关闭状态,不会渲染任何第三方脚本。唯一的限制是上面说的批量规模上限,那是为了不让浏览器标签页卡死,不是收费门槛。