1. 什么是User-Agent及其核心作用User-Agent用户代理是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浏览器兼容性说明注意现代浏览器出于隐私考虑已经开始减少User-Agent中的详细信息转而采用User-Agent Client Hints机制。2. 主流浏览器的User-Agent格式解析2.1 Chrome浏览器User-Agent桌面版Chrome的典型User-AgentMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36移动版Chrome的典型User-AgentMozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Mobile Safari/537.36关键变化点操作系统标识从具体版本变为固定值如Android 10设备型号被替换为固定值K次要版本号被归零0.0.02.2 Firefox浏览器User-AgentFirefox的User-Agent结构相对独特Mozilla/5.0 (platform; rv:gecko-version) Gecko/gecko-trail Firefox/firefox-version实际示例Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0组成部分解析rv:47.0Gecko引擎版本与Firefox版本一致Gecko/20100101固定标识符Firefox/47.0浏览器品牌和版本2.3 Safari浏览器User-AgentMac版SafariMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15iOS版SafariMozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1特点包含Version/xx.x字段明确浏览器版本移动版会标注Mobile标识WebKit版本号与浏览器版本号分开表示3. 其他常见User-Agent类型3.1 基于Chromium的浏览器Edge浏览器Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0Opera浏览器Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 OPR/124.0.0.0识别特征Edge添加Edg/或EdgA/前缀Opera添加OPR/前缀其余结构与Chrome基本一致3.2 爬虫和机器人的User-AgentGooglebotMozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)Yandex爬虫Mozilla/5.0 (compatible; YandexAccessibilityBot/3.0; http://yandex.com/bots)共同特点明确标注compatible和机器人类型包含来源网站链接通常遵循主流浏览器格式3.3 开发工具和库的User-AgentcURL工具curl/7.64.1Postman客户端PostmanRuntime/7.26.5特点格式简单直接只包含工具名称和版本没有浏览器兼容性信息4. User-Agent的实用技巧与注意事项4.1 如何正确解析User-Agent不建议使用正则表达式直接解析User-Agent字符串而应该使用专门的解析库JavaScript示例使用ua-parser-jsconst UAParser require(ua-parser-js); const parser new UAParser(); const result parser.setUA(navigator.userAgent).getResult(); console.log(result.browser); // {name: Chrome, version: 91.0.4472.124} console.log(result.os); // {name: Windows, version: 10} console.log(result.device); // {model: undefined, type: undefined, vendor: undefined}Python示例使用user-agentsfrom user_agents import parse ua_string Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 user_agent parse(ua_string) print(user_agent.browser) # Browser(familyMobile Safari, version(13, 0, 3)) print(user_agent.os) # OperatingSystem(familyiOS, version(13, 2, 3)) print(user_agent.device) # Device(familyiPhone, brandApple, modeliPhone)4.2 User-Agent的常见应用场景统计分析识别用户使用的设备和浏览器比例兼容性处理为特定浏览器提供polyfill或fallback爬虫识别阻止恶意爬虫访问内容适配为移动设备返回移动版页面重要提示不应该仅依赖User-Agent来做功能限制而应该使用特性检测feature detection作为主要手段User-Agent只作为辅助。4.3 User-Agent减少计划的影响各大浏览器厂商正在推行User-Agent减少计划User-Agent Reduction主要变化包括操作系统版本号被固定如所有Android设备都报告Android 10设备具体型号被隐藏浏览器次要版本号被归零新增User-Agent Client Hints作为替代方案应对策略逐步迁移到User-Agent Client Hints使用特性检测替代浏览器嗅探更新现有的User-Agent解析逻辑Client Hints使用示例服务器端Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform客户端会返回类似以下的头信息Sec-CH-UA: Chromium;v91, Not;A Brand;v99 Sec-CH-UA-Mobile: ?1 Sec-CH-UA-Platform: Android5. 历史User-Agent格式参考5.1 早期浏览器User-AgentNetscape Navigator 4Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)Internet Explorer 6Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)特点版本号简单包含较少平台信息仍然保持Mozilla兼容性声明5.2 移动设备特有User-Agent早期Android浏览器Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1Windows Phone IEMozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800)特点包含具体设备型号如Nexus One明确标注移动版本Mobile包含详细构建版本信息6. User-Agent的最佳实践不要依赖User-Agent做关键功能判断使用特性检测更为可靠在服务器端记录完整的User-Agent用于分析和故障排查处理未知User-Agent时要保守默认提供基本功能而非高级特性定期更新User-Agent解析逻辑适应浏览器更新和格式变化考虑隐私影响避免收集不必要的用户设备信息对于Web开发者我建议在大多数情况下应该避免直接处理User-Agent字符串而是使用现代浏览器提供的API和特性检测方法。只有在处理特定兼容性问题或分析访问日志时才需要深入了解User-Agent的细节。