User-Agent 是什么
User-Agent 是客户端在请求里的自我描述:软件名称、版本、操作系统与渲染内核,格式约定为「产品/版本」后跟注释。它最初用于内容适配与访问统计,如今更多服务于兼容分支、灰度分流与风控画像。因为完全由客户端填写,它只能作为参考信号,不能作为安全边界。
基本信息
| 名称 | User-Agent(常缩写为 UA) |
|---|---|
| 作用 | 标识客户端类型、版本与平台 |
| 规范 | RFC 9110 §10.1.5 |
| 典型形态 | 浏览器一串 Mozilla/5.0 …;命令行 curl/8.5.0;SDK python-requests/2.32 |
| 现状 | Chrome 等已冻结并按需精简 UA,逐步转向 UA-CH 客户端提示 |
常见 UA 识别要点
| 客户端 | 典型片段 | 识别要点 |
|---|---|---|
| Chrome/Edge | Mozilla/5.0 … Chrome/131.0 Safari/537.36 | 同内核互认,需靠 Edg/ 等标记区分 |
| Safari | … Version/17.0 Safari/605.1.15 | 不含 Chrome 段 |
| curl | curl/8.5.0 | 基本是脚本或健康检查 |
| 爬虫 | 自定义名称 + 站点 URL | 解析与否看 robots 与访问频率约定 |
| App WebView | 内置浏览器 + 应用自定义标记 | 常用于兼容分支与灰度放量 |
观察与自定义
观察与自定义
curl -sI https://www.example.com/ -A 'MyBot/1.0 (+https://my.site/bot)' # 规范的自定义 UA
curl -sv https://www.example.com/ 2>&1 | grep -i '^> user-agent' # 看默认发出的 UA
nginx -T | grep -i user_agent # 看网关是否存在 UA 分流规则
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head # 统计 UA 分布不要用 UA 做权限或安全决策:任何脚本一行命令就能伪造。确需区分客户端时,应结合 TLS 指纹、行为特征与验证码等手段。
服务端该怎么用
- 用于展示与统计:按 UA 聚合客户端分布,判断需要支持哪些浏览器
- 兼容分支以能力探测为主、UA 判断为辅,减少误判带来的功能缺失
- 爬虫识别结合反向 DNS 校验与访问频率,而不是只匹配字符串
- 灰度分流必须保留默认分支,遇到未识别客户端要有兜底行为
边界与风险
- 同内核浏览器 UA 高度相似,难以精确区分版本与功能支持
- UA 可随意伪造,把它当风控唯一依据等于没有风控
- 浏览器正在冻结与精简 UA,依赖细节字符串的规则会逐渐失效
- UA 里的自定义标记可能随客户端版本被移除,不能当作稳定契约