什么是用户代理?
A用户代理 是一个在User-Agent 每个请求中的 HTTP 头,用于向服务器标识客户端的浏览器、应用程序、操作系统及其版本。MDN 将其定义为“一个特征字符串,可让服务器和网络对等方识别请求用户代理的应用程序、操作系统、供应商和/或版本”(MDN Web Docs(Mozilla)(2025年)。服务器会读取该值以决定如何格式化响应,而机器人检测系统则将其作为初步筛选条件。
User-Agent 头是如何工作的?
每个 HTTP 客户端,无论是浏览器、移动应用还是爬虫脚本,都会附加一个User-Agent 在每个外发请求中添加一个标头。桌面版 Chrome 的字符串通常包含浏览器名称和主版本号、操作系统以及平台标识符。随后,服务器可以返回针对移动端优化的页面、完整的桌面版布局,或者如果该字符串与已知的爬虫模式匹配,则阻止该请求。
该格式虽有大致的标准化规范,但在实际应用中并不统一。浏览器厂商历来会在字符串中包含早期浏览器的兼容性标识符,这就是为什么无论实际使用的是哪种浏览器,大多数现代用户代理字符串中仍包含“Mozilla/5.0”的原因。
用户代理简化如何改变信号
基于Chromium的浏览器一直在减少用户代理字符串中暴露的详细信息。“用户代理简化”功能会移除三项可识别信息:确切的平台和操作系统版本、设备型号以及浏览器的次要版本号(MDN Web Docs - 用户代理简化(2025年)。其目的是削弱该字符串作为被动指纹识别信号的效用。
需要详细客户端信息的服务器可以通过“User-Agent 客户端提示”来请求这些信息,这是一组Sec-CH-UA-* 只有当服务器选择启用时,浏览器才会发送这些标头。这使得该模型从被动广播转变为主动、结构化的信息交换。
使用场景
内容协商。 服务器利用用户代理(UA)来区分移动端和桌面端客户端,并据此提供相应的布局或图片尺寸,而无需单独的子域名或重定向链。
机器人检测与过滤。 curl、Python 的 requests 库以及无头浏览器等自动化工具会暴露出独特的默认字符串。检测层会标记那些用户代理(UA)与已知的非浏览器模式匹配、完全缺失,或与其他信号(如 TLS 指纹或标头顺序)不匹配的请求。
网页抓取与自动化。 网络爬虫和浏览器自动化工具通常会设置逼真的用户代理(UA)字符串,以减少早期被拦截的情况。一个匹配良好的用户代理应与正在模拟的实际浏览器相符,并且保持一致Sec-CH-UA-* 这些标头有助于避免信号不匹配。Massive 的 Web Render API 在基础设施层管理这些标头,返回干净的页面内容,而无需客户端手动调整每个请求的字符串。
常见问题解答
Chrome 桌面版中典型的字符串如下所示:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36. 它仅用一行代码就指定了平台、布局引擎和浏览器系列。
是的。任何 HTTP 客户端都可以向User-Agent 标头。浏览器提供了开发者工具,允许按标签页覆盖该标头,而自动化库则可通过编程方式设置它。仅伪造用户代理(UA)通常不足以绕过检测,因为服务器会将其与其他信号(如 TLS 指纹和标头顺序)进行关联。参见用户代理伪造 以获得全面的治疗。
User-Agent 客户端提示是一组Sec-CH-UA-* 这些标头为服务器提供了一种结构化且基于用户主动选择的方式,用于请求特定的客户端详细信息。浏览器不再将所有信息打包成一个字符串进行广播,而是仅发送服务器明确请求的内容,从而降低了被动指纹识别的风险。
许多检测系统将缺失的情况视为User-Agent 将请求头视为自动客户端的直接标志,因为合法浏览器总是会发送请求头。如果请求头缺失或为空,则可将流量范围缩小至脚本或配置错误的工具,因此这是一种成本低廉且可靠的早期过滤机制。