1. User Agent基础概念解析User Agent用户代理是HTTP协议中一个至关重要的请求头字段它像一张数字身份证向服务器表明客户端的身份信息。每次当你用浏览器访问网站时浏览器都会自动在HTTP请求头中包含这个标识字符串格式通常如下User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36这个看似杂乱的字符串实际上包含多个关键信息段用特定的语法规则组织Mozilla/5.0是历史遗留的兼容性标识括号内的Windows NT 10.0; Win64; x64表示操作系统平台AppleWebKit/537.36是渲染引擎信息KHTML, like Gecko是引擎兼容性说明Chrome/91.0.4472.124是浏览器品牌和版本号最后的Safari/537.36则是WebKit的兼容性标记注意现代浏览器出于隐私保护考虑已经开始实施User-Agent削减计划User-Agent Reduction许多详细参数会被通用值替代真实设备信息需要通过User-Agent Client Hints获取。2. 主流浏览器User Agent格式详解2.1 Chrome浏览器UA结构桌面版Chrome的典型UA字符串Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36移动版Chrome则带有Mobile标识Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36关键特征包含AppleWebKit引擎版本使用KHTML兼容标记最后会重复Safari标识2.2 Firefox浏览器UA模式Firefox的UA具有独特的Gecko引擎标识Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0移动版示例Mozilla/5.0 (Android 13; Mobile; rv:109.0) Gecko/115.0 Firefox/115.0识别要点包含Gecko/20100101固定字符串有rv:开头的Gecko版本号明确标注Firefox品牌和版本2.3 Safari浏览器的UA特征Mac版SafariMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15iOS版会标注移动设备信息Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Mobile/15E148 Safari/604.1特殊标记包含Version/xx.x独立版本号iOS设备会显示类似Mac OS X的系统标识移动版有Mobile/硬件标识3. 移动设备与特殊浏览器的UA模式3.1 微信内置浏览器UA微信内置浏览器的UA会包含MicroMessenger标识Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.40(0x1800282f)关键特征在标准iOS UA后追加MicroMessenger信息包含微信版本号(如8.0.40)可能有十六进制设备标识符3.2 安卓WebView的UA格式安卓应用内WebView的典型UAMozilla/5.0 (Linux; Android 10; SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36与普通Chrome移动版的区别包含具体设备型号(如SM-G975F)可能追加应用特有标识版本号通常滞后于正式版浏览器3.3 桌面端Edge浏览器UA基于Chromium的Edge浏览器Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58识别特征末尾有Edg/版本号标记其他部分与Chrome高度相似企业版可能包含额外标识4. 爬虫与自动化工具的UA识别4.1 搜索引擎爬虫UAGooglebot桌面爬虫Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)百度移动爬虫Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html)共同特点明确声明compatible兼容性包含爬虫名称和版本提供官方信息链接4.2 自动化测试工具UASelenium WebDriverMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36Postman测试工具PostmanRuntime/7.29.2识别要点标准浏览器UA可能被复用专用工具会有独特前缀可能包含自动化测试标记5. UA解析的实用技巧与代码示例5.1 使用正则表达式解析UAJavaScript示例代码function parseUserAgent(ua) { const pattern /(?browserChrome|Firefox|Safari|Edg|OPR|MSIE|Trident)\/?\s*([\d.])/i; const osPattern /(?osWindows NT|Android|iPhone|Mac OS X|Linux)[\s\/;]*(?:[\d._])?/i; const browserMatch ua.match(pattern); const osMatch ua.match(osPattern); return { browser: browserMatch?.groups?.browser || Unknown, version: browserMatch?.[2] || Unknown, os: osMatch?.groups?.os || Unknown }; }5.2 服务端UA识别最佳实践Node.js示例const express require(express); const app express(); app.use((req, res, next) { const ua req.get(User-Agent); // 移动设备检测 const isMobile /Mobile|Android|iPhone|iPad|iPod/i.test(ua); // 爬虫检测 const isBot /bot|crawl|spider|slurp|baidu|google|yandex/i.test(ua); req.deviceType isMobile ? mobile : desktop; req.isBot isBot; next(); }); app.get(/, (req, res) { res.send(Accessed from ${req.deviceType} device); });5.3 现代浏览器UA削减的影响User-Agent削减后开发者应该使用Feature Detection替代UA检测需要详细设备信息时启用Client HintsAccept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform服务端响应示例res.setHeader(Accept-CH, Sec-CH-UA, Sec-CH-UA-Mobile); res.setHeader(Critical-CH, Sec-CH-UA, Sec-CH-UA-Mobile);6. 历史UA格式与演进过程6.1 早期浏览器UA示例Netscape 4.0Mozilla/4.0 (compatible; MSIE 4.0; Windows 95)IE 6.0典型UAMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)特点简单的Mozilla版本号明确标注IE兼容模式操作系统信息较简单6.2 现代UA的演进趋势隐私保护逐步减少精确设备信息标准化主流浏览器趋于相似格式扩展性通过Client Hints补充信息冻结机制固定某些字段值防止追踪实际开发中建议使用专业的UA解析库如UAParser.js、browscap等它们会持续更新规则库以适应UA格式变化。