1. 什么是 User-Agent?

1. 什么是 User-Agent?

每当你打开浏览器访问一个网站,服务器在响应你的请求之前,往往已经通过一串字符串对你的浏览器、操作系统、设备类型了如指掌。这串字符串就是 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 中同时看到 Mozilla、AppleWebKit、Chrome 和 Safari。

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 浏览器,版本 124Safari/537.36Safari 兼容标识历史遗留,Chrome 基于 WebKit,与 Safari 兼容

3.2 Windows NT 版本号对照

NT 版本Windows 系统Windows NT 5.1Windows XPWindows NT 6.0Windows VistaWindows NT 6.1Windows 7Windows NT 6.2Windows 8Windows NT 6.3Windows 8.1Windows 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 8、iPhone

操作系统版本:如 Android 14、iPhone OS 17_4

Mobile 标识:用于区分移动端和桌面端

4. 常见 User-Agent 速查表

4.1 桌面浏览器

浏览器典型 User-AgentChrome 124 (Windows)Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36Firefox 125 (Windows)Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0Safari 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.15Edge 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.0Opera 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-AgentChrome (Android)Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.82 Mobile Safari/537.36Safari (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.1Samsung 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-AgentGooglebotMozilla/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.0cURLcurl/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:

$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 使用开发者工具查看

在 Chrome 中按 F12 打开 DevTools

切换到 Network(网络) 标签页

刷新页面,点击任意请求

在 Request Headers(请求标头) 中找到 User-Agent

7. 如何修改 User-Agent

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

打开 DevTools (F12)

点击右上角 ⋮ → More tools(更多工具) → Network conditions(网络状况)

取消勾选 Use browser default

在下拉菜单中选择预设设备,或输入自定义 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-js、bowser、detect-browserPythonuser-agents(基于 ua-parser)PHPWhichBrowser/ParserJavauap-javaGomileusna/useragent

10. 常见问题

UA 字符串可以伪造吗?

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

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

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

navigator.userAgent 会随 UA-CH 被废弃吗?

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

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

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

UA 检查:检测已知爬虫特征 UA

行为分析:请求频率、鼠标轨迹、JavaScript 执行能力

IP 信誉:检查数据中心 IP、已知恶意 IP

CAPTCHA:人机验证挑战

Honeypot:隐藏链接陷阱

User-Agent 和 Accept 头的区别?

User-Agent 标识客户端身份(是什么软件),Accept 系列头(Accept、Accept-Language、Accept-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 分析工具 查看并解析你的浏览器信息吧!

相关推荐

爱情宣言经典语录3
best365官网登陆

爱情宣言经典语录3

08-06 👁️ 6993
【辍】的拼音、怎么读
best365官网登陆

【辍】的拼音、怎么读

12-13 👁️ 8079
如何检测声卡是否损坏_怎么检测声卡坏没坏图文步骤