反馈

User-Agent 字符串是什么:为什么都带 Mozilla

每次浏览器发请求,都会自动带上一个 User-Agent 字符串,比如 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...——这一长串看起来杂乱的文字,藏着识别浏览器、操作系统、设备类型的关键信息,同时也因为历史原因,格式显得相当混乱。


目录

  1. User-Agent 是什么,怎么传递
  2. 为什么格式看起来这么乱:历史遗留的"伪装"
  3. 常见的伪装痕迹:CriOS、FxiOS、微信内置浏览器
  4. Bot 识别:爬虫和命令行工具

1. User-Agent 是什么,怎么传递

User-Agent 是 HTTP 请求 Header 里的一个字段,浏览器(或其它发起 HTTP 请求的客户端)用它向服务器声明自己是谁——理论上服务器可以据此判断该给桌面版还是移动版页面、该不该支持某个特性。服务器端代码或统计工具解析 User-Agent 字符串,就能大致识别出访问者用的浏览器类型和版本、渲染引擎、操作系统、设备类型。

2. 为什么格式看起来这么乱:历史遗留的"伪装"

几乎所有现代浏览器的 User-Agent 都以 Mozilla/5.0 开头——包括 Chrome、Safari、Edge,甚至完全不是基于 Mozilla/Firefox 内核的浏览器。这是一段浏览器历史遗留下来的"传统":早期网站会用 User-Agent 字符串判断浏览器能力,只对识别为 Mozilla(Netscape)的浏览器提供某些高级特性;后来的浏览器为了不被网站兼容性判断拒之门外,纷纷在自己的 User-Agent 里也加上 Mozilla/5.0 前缀"冒充"一下,这个习惯一直沿用到今天,成了整个行业约定俗成的兼容性包袱。

3. 常见的伪装痕迹:CriOS、FxiOS、微信内置浏览器

iOS 系统的一个特殊规则加剧了这种"伪装"现象:苹果规定所有 iOS 上的第三方浏览器 App 底层必须使用系统自带的 WebKit 引擎(不能用自己的渲染引擎),所以 iOS 上的 Chrome、Firefox 在 User-Agent 里会带上特殊标识——Chrome for iOS 带 CriOS,Firefox for iOS 带 FxiOS——用来和真正的 Safari 区分开,但底层渲染内核实际上和 Safari 是同一个。

另外,微信、QQ、UC 浏览器等国产 App 内置的浏览器组件,也会在 User-Agent 里加上自己的专属标识(比如微信的 MicroMessenger),方便网站识别"这是从 App 内嵌浏览器打开的"这类特殊场景(常见需求是引导用户跳转到外部浏览器完成某些操作,比如支付)。

4. Bot 识别:爬虫和命令行工具

搜索引擎爬虫、监控工具、命令行 HTTP 客户端也会带上各自的 User-Agent,通常格式更规整、更容易识别:比如 Google 爬虫是 Googlebot,百度爬虫是 Baiduspider,命令行工具 curl 和 Python 的 requests 库默认 User-Agent 分别是 curl/版本号python-requests/版本号。网站的反爬虫机制、日志分析工具经常需要先解析出这些标识,用来区分"真实用户访问"和"程序化访问",进而决定要不要限流或返回不同内容。

不过要注意:User-Agent 是客户端自己声明的,本质上是可以随意伪造的——爬虫完全可以把自己的 User-Agent 改成看起来像普通浏览器,所以单纯靠 User-Agent 字符串做安全防护并不可靠,只能作为一种低成本的初步识别手段,更严格的场景通常还需要结合行为特征、Client Hints 等其它信号。


在线工具:UserAgent分析 · Useragent随机生成