
什么是 User Agent 字符串?
User Agent 字符串是 Web 浏览器和其他 HTTP 客户端在 User-Agent 请求头中发送的文本标识符。它告诉服务器正在使用什么浏览器、操作系统和渲染引擎。最初设计用于内容协商,User Agent 字符串已演变成复杂、充满历史遗留的标识符,反映了数十年的浏览器兼容性战争。

User Agent 字符串的问题
早期浏览器发送简单的字符串,如 Mosaic/0.9。当 Netscape (Mozilla) 占据主导地位时,服务器开始只为 Mozilla 浏览器提供增强内容。Internet Explorer 的回应是在其 UA 开头加上 Mozilla/。基于 WebKit 的 Chrome 包含了 AppleWebKit,以继承针对 Safari 优化的内容。每个新浏览器都添加了令牌,以显得与现有浏览器兼容。结果:几乎每个浏览器都以 Mozilla/5.0 开头,并声称兼容其并未使用的引擎。
User Agent 字符串的结构
Windows 上现代 Chrome 的 User Agent 包括:Mozilla/5.0 兼容性令牌、显示 Windows NT 10.0 和 x64 架构的平台部分、WebKit 引擎版本、Chrome 浏览器版本以及 Safari 兼容性令牌。每个组件都是出于历史向后兼容性原因而存在,而非准确性。
关键 User Agent 属性
浏览器识别:系列名称(Chrome、Firefox、Safari、Edge)、版本和构建号、渲染引擎(Blink、Gecko、WebKit)。
操作系统:系列(Windows、macOS、Linux、Android、iOS)、版本、架构。
设备类型:桌面 vs 移动 vs 平板,以及移动设备的制造商和型号名称。

User-Agent Client Hints
Google 正在逐步淘汰信息丰富的 User Agent 字符串,转而使用 User-Agent Client Hints (UA-CH),服务器通过 HTTP 头显式请求仅需要的特定属性。这种方法通过减少被动数据收集来提高隐私,使指纹识别更难,因为客户端控制它们共享的内容,并为数据共享提供显式而非隐式的同意。
通过 User Agent 检测机器人
许多请求来自机器人、爬虫和自动化工具,每个都有其自己的 User Agent 字符串。Googlebot 标识 Google 的网络爬虫,facebookexternalhit 标识 Facebook 的链接预览获取器,Python-requests 标识 Python requests 库,curl 标识 curl 命令行工具。服务器日志包含大量机器人流量。识别机器人 User Agent 有助于在分析报告和安全监控中区分人类和自动化流量。
User Agent 伪造
User Agent 很容易被伪造,而且这种情况经常发生。注重隐私的浏览器会随机化或最小化其 UA 字符串以防止跟踪。开发人员会覆盖 User Agent 以测试网站在不同浏览器或移动设备上的显示效果。网络爬虫伪装成普通浏览器以避免机器人检测。移动设备模拟器设置移动 User Agent。
由于伪造很容易,User Agent 数据绝不应被信任用于安全决策。它对于分析和可选功能检测很有用,但绝不能用于限制功能或做出授权决策。

实用的解析库
可靠的 UA 解析需要专门的库,这些库维护定期更新的浏览器模式数据库。流行的选项包括用于 JavaScript 的 ua-parser-js(在 Node.js 和浏览器中均可工作)、用于 Python 的 user-agents(基于 Google 的 UA 数据库)、用于 PHP 的 device-detector(具有全面的设备识别功能)以及用于 PHP 的 WhichBrowser(专注于移动设备检测)。随着浏览器生态系统的发展,基于原始正则表达式的解析很快就会变得难以维护。
分析中的 User Agent
分析平台使用 User Agent 解析来报告浏览器分布、操作系统细分以及移动与桌面流量。这些数据为以下决策提供信息:支持哪些浏览器、是否投资移动优化以及哪些 JavaScript 功能可以在不使用 polyfill 的情况下使用。
使用 User Agent 解析器工具
我们的工具会自动检测并显示您当前的浏览器 User Agent 字符串,然后解析并显示所有组件:浏览器名称和版本、操作系统、设备类型和渲染引擎。您也可以粘贴任何自定义 UA 字符串进行分析。该工具通过匹配爬虫签名数据库来识别已知的机器人 User Agent。
用于调试 Web 应用程序中的 User Agent 检测逻辑、分析访问日志中的机器人流量模式、验证移动检测代码是否正确工作,以及记录用户实际运行的浏览器。