科普

User-Agent 完全指南:从原理到实战,浏览器标识符深度解析

全面解析 HTTP User-Agent 的组成结构、历史演变、在浏览器检测与爬虫识别中的应用,以及如何在各平台读取、修改 User-Agent,并提供常见 UA 字符串速查表。

每当你打开浏览器访问一个网站,服务器在响应你的请求之前,往往已经通过一串字符串对你的浏览器、操作系统、设备类型了如指掌。这串字符串就是 User-Agent(用户代理),它像一张无形的”身份证”,在互联网的每一次 HTTP 请求中默默传递着客户端的信息。

想立刻查看你当前浏览器的 User-Agent 详情?使用我们的 User-Agent 分析工具 一键解析所有字段。

1. 什么是 User-Agent?

User-Agent(UA) 是 HTTP 协议中的一个请求头字段,由客户端(通常是浏览器)在发起 HTTP 请求时自动附加,用于向服务器标识自身的身份信息。

1.1 UA 在 HTTP 请求中的位置

每一次 HTTP 请求都包含请求头(Headers),User-Agent 是其中的标准字段之一:

GET /index.html 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
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

1.2 User-Agent 的标准定义

根据 RFC 7231(HTTP/1.1 语义与内容),User-Agent 字段的规范格式为:

User-Agent = product *( RWS ( product / comment ) )
product    = token ["/" product-version]

即:一个或多个”产品/版本”标识,以及可选的注释(括在圆括号内)。


2. User-Agent 的历史演变

UA 字符串的历史充满了有趣的”兼容性博弈”,理解这段历史能帮助我们读懂那些看似奇怪的 UA 格式。

2.1 起源:Mosaic 与 Netscape(1990s)

最早的 Web 浏览器 NCSA Mosaic 使用了简单的 UA:

NCSA_Mosaic/2.0 (Windows 3.1)

1993 年,Netscape Navigator 诞生并引入了 Mozilla 这一标识(Mozilla = Mosaic + Killer):

Mozilla/1.0 (Win3.1)

当时许多服务器会检测 Mozilla,只有检测到 Mozilla 才发送高级 HTML 内容(如框架)。

2.2 兼容的代价:IE 的”假扮”(1995)

微软发布 Internet Explorer 时,为了能接收服务器的高级内容,IE 在 UA 中加入了 Mozilla 兼容声明:

Mozilla/2.0 (compatible; MSIE 3.0; Windows 95)

从此,“伪装成 Mozilla” 的传统延续至今。

2.3 渲染引擎时代(2000s)

随着 Gecko(Firefox)、WebKit(Safari)、Blink(Chrome)等渲染引擎的兴起,UA 字符串变得越来越长。每个新浏览器为了兼容各种服务端检测,都会将自己”伪装”成多种已知浏览器:

  • Firefox:声称自己兼容 Mozilla 和 Gecko
  • Safari:声称自己兼容 Mozilla 和 AppleWebKit
  • Chrome:声称兼容 Mozilla、AppleWebKit,还加上了 Safari(!)

这就是为什么你会在 Chrome 的 UA 中同时看到 MozillaAppleWebKitChromeSafari

2.4 现代 UA 格式的确立

时代代表浏览器UA 特点
1993-1995Mosaic、Netscape 1.x简短,直接标识自己
1995-2000IE 3-5加入 Mozilla 兼容标识
2001-2008Firefox、Safari加入渲染引擎标识(Gecko、WebKit)
2008-至今Chrome、Edge叠加多个兼容标识

3. 解剖现代 User-Agent 字符串

以 Windows 下 Chrome 浏览器的 UA 为例,逐段分析:

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

3.1 字段详解

字段含义
Mozilla/5.0Mozilla/5.0历史遗留兼容标识,几乎所有现代浏览器都有
(Windows NT 10.0; Win64; x64)操作系统注释Windows 10,64 位系统,64 位处理器
AppleWebKit/537.36渲染引擎WebKit/Blink 引擎版本
(KHTML, like Gecko)渲染引擎注释KHTML 兼容,类 Gecko 行为
Chrome/124.0.0.0浏览器标识Chrome 浏览器,版本 124
Safari/537.36Safari 兼容标识历史遗留,Chrome 基于 WebKit,与 Safari 兼容

3.2 Windows NT 版本号对照

NT 版本Windows 系统
Windows NT 5.1Windows XP
Windows NT 6.0Windows Vista
Windows NT 6.1Windows 7
Windows NT 6.2Windows 8
Windows NT 6.3Windows 8.1
Windows NT 10.0Windows 10 / 11

3.3 移动端 UA 的差异

Android Chrome:

Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.82 Mobile Safari/537.36

iOS Safari:

Mozilla/5.0 (iPhone; CPU iPhone OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Mobile/15E148 Safari/604.1

移动端 UA 新增了:

  • 设备型号:如 Pixel 8iPhone
  • 操作系统版本:如 Android 14iPhone OS 17_4
  • Mobile 标识:用于区分移动端和桌面端

4. 常见 User-Agent 速查表

4.1 桌面浏览器

浏览器典型 User-Agent
Chrome 124 (Windows)Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
Firefox 125 (Windows)Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
Safari 17 (macOS)Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15
Edge 124 (Windows)Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0
Opera 109 (Windows)Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 OPR/109.0.0.0

4.2 移动端浏览器

浏览器典型 User-Agent
Chrome (Android)Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.82 Mobile Safari/537.36
Safari (iPhone)Mozilla/5.0 (iPhone; CPU iPhone OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Mobile/15E148 Safari/604.1
Samsung InternetMozilla/5.0 (Linux; Android 14; SM-S928B) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/25.0 Chrome/121.0.0.0 Mobile Safari/537.36

4.3 爬虫与机器人

爬虫User-Agent
GooglebotMozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
BingbotMozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
BaiduspiderMozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
Python requestspython-requests/2.31.0
cURLcurl/8.6.0

5. User-Agent 的应用场景

5.1 响应式内容分发

服务器可根据 UA 区分访问者是桌面端还是移动端,从而返回不同版本的页面:

// Node.js 示例
function detectDevice(userAgent) {
  const mobileKeywords = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;
  return mobileKeywords.test(userAgent) ? 'mobile' : 'desktop';
}

app.get('/', (req, res) => {
  const device = detectDevice(req.headers['user-agent']);
  if (device === 'mobile') {
    res.redirect('/mobile');
  } else {
    res.sendFile('desktop/index.html');
  }
});

5.2 浏览器兼容性处理

前端代码中可通过 UA 检测浏览器类型,针对性地加载 Polyfill 或执行降级处理:

const ua = navigator.userAgent;

const isFirefox = ua.includes('Firefox');
const isChrome = ua.includes('Chrome') && !ua.includes('Edg');
const isEdge = ua.includes('Edg/');
const isSafari = ua.includes('Safari') && !ua.includes('Chrome');

// 针对 Safari 的特殊处理
if (isSafari) {
  document.documentElement.classList.add('safari-mode');
}

⚠️ 注意:Chrome 的 UA 包含 Safari 字符串,因此判断 Safari 时需排除 Chrome。

5.3 爬虫识别与反爬

网站管理员可以通过 UA 过滤恶意爬虫:

# Python Flask 示例
from flask import request, abort

ALLOWED_BOTS = ['Googlebot', 'Bingbot', 'Baiduspider']

@app.before_request
def check_user_agent():
    ua = request.headers.get('User-Agent', '')
    
    # 屏蔽可疑的空 UA 或过短的 UA
    if len(ua) < 10:
        abort(403)
    
    # 允许特定已知爬虫
    is_known_bot = any(bot in ua for bot in ALLOWED_BOTS)

5.4 网站统计与分析

UA 数据是网站分析工具(如 Google Analytics)的重要数据来源,可用于统计:

  • 用户使用的浏览器分布
  • 操作系统占比
  • 桌面端 vs 移动端比例
  • 设备型号分布

5.5 A/B 测试与个性化

通过设备类型区分,可以对不同终端用户展示不同的界面设计或功能:

// 仅对桌面用户展示复杂动画
const isDesktop = !/Mobi|Android/i.test(navigator.userAgent);
if (isDesktop) {
  enableParticleAnimation();
}

6. 如何读取 User-Agent

6.1 在浏览器中读取

// 读取完整 UA 字符串
const ua = navigator.userAgent;
console.log(ua);

// 使用现代 API(更语义化)
const uaData = navigator.userAgentData; // Chrome 90+
console.log(await uaData.getHighEntropyValues([
  'architecture', 'model', 'platform', 'platformVersion',
  'fullVersionList'
]));

6.2 在服务端读取

Node.js(Express):

app.get('/', (req, res) => {
  const ua = req.headers['user-agent'];
  console.log('客户端 UA:', ua);
});

Python(Flask):

from flask import request

@app.route('/')
def index():
    ua = request.headers.get('User-Agent')
    print(f'客户端 UA: {ua}')

PHP:

<?php
$ua = $_SERVER['HTTP_USER_AGENT'];
echo "客户端 UA: " . htmlspecialchars($ua);
?>

Java(Spring):

@GetMapping("/")
public String index(@RequestHeader("User-Agent") String userAgent) {
    System.out.println("客户端 UA: " + userAgent);
    return "index";
}

6.3 使用开发者工具查看

  1. 在 Chrome 中按 F12 打开 DevTools
  2. 切换到 Network(网络) 标签页
  3. 刷新页面,点击任意请求
  4. Request Headers(请求标头) 中找到 User-Agent

7. 如何修改 User-Agent

7.1 Chrome 开发者工具(临时修改)

  1. 打开 DevTools (F12)
  2. 点击右上角 More tools(更多工具)Network conditions(网络状况)
  3. 取消勾选 Use browser default
  4. 在下拉菜单中选择预设设备,或输入自定义 UA

7.2 浏览器扩展

推荐扩展:

  • User-Agent Switcher and Manager(Chrome/Firefox)
  • User-Agent Switcher(Firefox)

7.3 命令行工具

cURL:

# 模拟 Chrome 浏览器
curl -H "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" https://example.com

Python requests:

import requests

headers = {
    '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'
}

response = requests.get('https://example.com', headers=headers)

Python Playwright(自动化测试):

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    context = browser.new_context(
        user_agent='MyCustomBot/1.0'
    )
    page = context.new_page()
    page.goto('https://example.com')

8. Client Hints:User-Agent 的未来

由于 User-Agent 字符串包含过多个人信息(可用于浏览器指纹),Google 主导推出了 User-Agent Client Hints(UA-CH) 方案,以替代传统 UA 字符串。

8.1 UA-CH 的核心理念

  • 最小化原则:默认只提供最少的信息
  • 主动请求:服务器须明确请求所需信息
  • 隐私保护:减少被动指纹追踪

8.2 UA-CH 请求头示例

客户端默认发送:

Sec-CH-UA: "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "Windows"

服务器如需更多信息,在响应头中声明:

Accept-CH: Sec-CH-UA-Full-Version-List, Sec-CH-UA-Arch, Sec-CH-UA-Model

客户端后续请求会携带更多字段:

Sec-CH-UA-Full-Version-List: "Chromium";v="124.0.6367.82", "Google Chrome";v="124.0.6367.82"
Sec-CH-UA-Arch: "x86"
Sec-CH-UA-Model: ""

8.3 JavaScript 中读取 UA-CH

// 读取基础信息(无需权限)
const uaData = navigator.userAgentData;
console.log(uaData.brands);     // 浏览器品牌列表
console.log(uaData.mobile);     // 是否移动端
console.log(uaData.platform);   // 操作系统

// 读取详细信息(需要 Permissions Policy)
const highEntropyValues = await uaData.getHighEntropyValues([
  'architecture',
  'bitness',
  'model',
  'platformVersion',
  'fullVersionList',
  'uaFullVersion',
  'wow64'
]);
console.log(highEntropyValues);

8.4 UA-CH 支持情况

浏览器支持状态
Chrome 90+✅ 完整支持
Edge 90+✅ 完整支持
Firefox❌ 尚未支持
Safari❌ 尚未支持

9. UA 检测的最佳实践

9.1 优先使用特性检测

UA 检测是”用户代理嗅探”,属于非常规手段。在前端开发中,应优先使用特性检测(Feature Detection)

// ✅ 推荐:检测特性而非 UA
if ('geolocation' in navigator) {
  // 支持地理位置 API
}

if (CSS.supports('display', 'grid')) {
  // 支持 CSS Grid
}

// ❌ 不推荐:通过 UA 推断浏览器能力
if (navigator.userAgent.includes('Chrome')) {
  // 假设 Chrome 支持某功能
}

9.2 UA 检测的适用场景

场景推荐方案
功能支持判断使用特性检测(Modernizr 等)
移动端/桌面端区分使用 CSS 媒体查询 + UA作为补充
服务端内容分发UA + Accept 头结合判断
统计分析UA 解析(结合 UA-CH)
反爬虫UA + 行为分析 + IP 信誉

9.3 解析 UA 字符串的推荐库

语言推荐库
JavaScriptua-parser-jsbowserdetect-browser
Pythonuser-agents(基于 ua-parser)
PHPWhichBrowser/Parser
Javauap-java
Gomileusna/useragent

10. 常见问题

UA 字符串可以伪造吗?

可以,且非常容易。 UA 字符串仅是客户端自我声明的字段,服务器无法验证其真实性。任何 HTTP 客户端都可以发送任意 UA 字符串。因此,UA 不能作为安全判断的唯一依据,需结合 IP 信誉、行为分析等多维度手段。

为什么所有浏览器的 UA 都有 Mozilla/5.0

这是历史遗留问题。早期网站只向 Netscape(Mozilla)发送完整内容,其他浏览器为了兼容,纷纷在 UA 中加入 Mozilla。这一传统延续至今,几乎所有现代浏览器都以 Mozilla/5.0 开头。

不会立即废弃,但 Google 曾计划在 Chrome 中逐步冻结 navigator.userAgent(仅保留非常有限的信息)。目前该计划已暂停,但长期来看 UA-CH 是官方推荐方向。

如何区分真实用户和爬虫?

仅凭 UA 不可靠,建议综合以下手段:

  1. UA 检查:检测已知爬虫特征 UA
  2. 行为分析:请求频率、鼠标轨迹、JavaScript 执行能力
  3. IP 信誉:检查数据中心 IP、已知恶意 IP
  4. CAPTCHA:人机验证挑战
  5. Honeypot:隐藏链接陷阱

User-Agent 和 Accept 头的区别?

User-Agent 标识客户端身份(是什么软件),Accept 系列头(AcceptAccept-LanguageAccept-Encoding)描述客户端能接受什么类型的内容。两者配合使用,服务器可以提供最合适的响应。


11. 在线分析工具

想要快速解析当前浏览器的 User-Agent,或者分析特定的 UA 字符串,可以使用我们的 User-Agent 分析工具,支持:

  • 自动读取并展示当前浏览器 UA
  • 解析浏览器名称与版本
  • 识别操作系统与版本
  • 判断设备类型(桌面/移动/平板)
  • 识别渲染引擎信息
  • 标注是否为爬虫/机器人

12. 总结

User-Agent 是 Web 生态中一个历史悠久、看似简单却内涵丰富的组件。从 1993 年 Mosaic 浏览器的简单标识,到如今 Chrome 那串包含多个引擎标记的复杂字符串,UA 的演变折射出 Web 技术的发展历程。

核心要点建议
UA 可被伪造不要将 UA 作为唯一安全判断依据
优先特性检测前端开发优先使用特性检测而非 UA 嗅探
了解 UA-CH关注 User-Agent Client Hints 的发展动态
使用成熟库解析 UA 时使用社区维护的专业库
结合多维度反爬虫场景结合 UA、行为、IP 多维判断

无论是前端开发、后端服务、运维监控还是网络安全,理解 User-Agent 都是 Web 开发者的必备技能。立即使用 User-Agent 分析工具 查看并解析你的浏览器信息吧!