RunToolz iconRunToolz
Welcome to RunToolz!
浏览器网页开发分析

User Agent字符串:阅读浏览器指纹

HTTP请求中那串奇怪的User Agent字符串能告诉你访客的浏览器和操作系统信息,但它经常误导。学习如何正确解析UA并了解其局限性。

RunToolz Team2026年1月21日4 min read

每个HTTP请求都包含User-Agent头。类似这样:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

这应该识别浏览器。实际上,它是历史混乱。

为什么每个浏览器都撒谎

那个Chrome user agent提到Mozilla、AppleWebKit、KHTML和Safari。Chrome不是这些中的任何一个。

原因如下:网站过去检查user agent并提供不同内容。新浏览器被阻止因为网站不认识它们。

所以浏览器开始撒谎。"我兼容Mozilla"成为标准。"我兼容AppleWebKit"被添加。每个浏览器都声称是其他每个浏览器。

想亲自试试吗?解析User Agent

你实际能学到什么

尽管混乱,user agent仍然包含有用信息:

浏览器名称和版本: 实际浏览器通常在结尾。"Chrome/120"或"Firefox/121"。

操作系统: "Windows NT 10.0"或"Mac OS X 10_15_7"或"Linux"。

设备类型: 移动user agent包括设备名称或"Mobile"。

Bot识别: Googlebot、Bingbot和其他爬虫识别自己。

常见检测模式

桌面Chrome:

...Chrome/120.0.0.0 Safari/537.36

Android上的移动Chrome:

...Android 10; Pixel 4...Chrome/120.0.0.0 Mobile Safari/537.36

iPhone上的Safari:

...iPhone; CPU iPhone OS 17_0 like Mac OS X...Safari/605.1.15

Firefox:

...Firefox/121.0

Edge、Opera、Brave和其他基于Chrome的浏览器看起来与Chrome类似。

为什么特性检测更好

User agent检测回答"什么浏览器?"特性检测回答"这个浏览器能做X吗?"

// User agent检测(脆弱)
if (navigator.userAgent.includes('Chrome')) {
  // 假设Chrome特性
}

// 特性检测(健壮)
if ('serviceWorker' in navigator) {
  // 使用service worker
}

浏览器变化。User agent字符串被修改。特性检测无论如何都有效。

User Agent何时仍然重要

分析。 理解你的受众:浏览器市场份额、移动vs桌面、操作系统分布。

Bot检测。 识别爬虫并调整服务器行为。

针对性测试。 重现用户在特定浏览器上报告的问题。

遗留支持决策。 如果0.1%的用户运行IE11,也许你停止支持它。

欺骗和隐私

User agent容易伪造。隐私扩展修改它们。有些浏览器让用户手动更改它们。

不要依赖user agent进行安全。它们是提示,不是认证。

浏览器指纹结合user agent与其他信号(屏幕大小、字体、插件)进行跟踪。这是有争议的,浏览器越来越多地阻止它。

Client Hint:现代替代品

User-Agent Client Hint是更新的方法。服务器请求特定信息:

Sec-CH-UA: "Chromium";v="120", "Google Chrome";v="120"
Sec-CH-UA-Platform: "Windows"
Sec-CH-UA-Mobile: ?0

结构化、可靠、尊重隐私。但采用仍在增长。

解析库

不要用正则表达式解析user agent。边缘情况会击败你。

使用维护模式数据库的成熟库:

  • ua-parser-js(JavaScript)
  • user-agents(Python)
  • DeviceDetector(PHP)

这些处理历史混乱并在新浏览器出现时更新。


User agent对分析和诊断有用,但对功能决策不可靠。用库解析它们,为功能优先使用特性检测,并记住任何用户都可以伪造他们的user agent。