User-Agent 标头如何工作
“用户代理”可以指客户端软件本身。User-Agent 则是客户端随请求发送的具体 HTTP 标头。
GET /products HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
这个字符串可能会声明浏览器系列、操作系统和渲染引擎。为保持历史兼容性,其中保留了许多标记,按字面理解可能产生误导。客户端也可以更改该标头,因此它无法证明客户端实际使用的软件或设备。
网站如何使用 User-Agent
- 兼容性: 规避已知的浏览器限制,或提供浏览器支持的功能。
- 设备专用内容: 选择移动端或桌面端响应,不过通常更推荐响应式设计。
- 分析: 估算不同浏览器、操作系统和设备的使用情况。
- 流量检查: 将缺失、格式错误或异常的字符串作为 机器人检测 的一项依据。
网站不应把该标头当作可靠的身份标识。许多用户可能发送相同的字符串,同一个客户端也可能发送不同的字符串。
User-Agent 与浏览器指纹识别
| User-Agent | 浏览器指纹识别 | |
|---|---|---|
| 来源 | 声明的 HTTP 标头 | 实测的浏览器信号 |
| 显示内容 | 声称使用的客户端和平台 | 字体、Canvas 输出等组合属性 |
| 可否更改 | 容易修改 | 需要让多项信号保持一致 |
| 识别能力 | 单独使用时较弱 | 基于概率,并不确定 |
浏览器指纹识别 可以将声明的 User-Agent 与 JavaScript 结果、屏幕尺寸和其他属性进行比对。如果桌面版 Chrome 的 User-Agent 字符串对应的是移动浏览器行为,就可能显得不一致。
配合代理使用 User-Agent
代理服务器 会更改目标网站看到的来源 IP,但通常不会替你选择 User-Agent。该标头由浏览器、HTTP 库或采集工具提供。
应使用与实际运行的客户端相符的字符串。使用浏览器自动化时,让浏览器生成正常标头,可以使 User-Agent 与其渲染引擎和支持的功能保持一致。请遵守网站条款和 robots.txt,将请求频率控制在合理范围内,也不要把更换 User-Agent 当作绕过访问控制的许可。
常见问题
代理会更改我的 User-Agent 吗?
通常不会。代理会更改对方看到的 IP 地址,而浏览器或 HTTP 客户端仍会发送其配置的 User-Agent 标头。
如何查看我的 User-Agent?
打开浏览器开发者工具,在 Network 面板中选择一个请求,然后查看请求标头。命令行客户端可以通过请求选项输出或设置该标头。
更改 User-Agent 能避开机器人检测吗?
不能。网站还可能检查请求模式、Cookie、JavaScript 属性和 TLS 行为。伪造的 User-Agent 如果与这些信号冲突,反而会让客户端更容易被标记。