🎯 什么是User-Agent?

🎯 什么是User-Agent?

🎯 什么是User-Agent?User-Agent(用户代理,简称UA)是HTTP请求头中的一个字符串,用于向服务器标识客户端的身份信息。每次浏览器访问网站时,都会在请求头中携带User-Agent。

典型的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

│ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ │ │ │ │ │ │ └────────────── Safari版本

│ │ │ │ │ │ │ │ │ └─────────────────────────── Chrome版本

│ │ │ │ │ │ │ │ └─────────────────────────────────── Gecko兼容

│ │ │ │ │ │ │ └──────────────────────────────────────────────── KHTML兼容

│ │ │ │ │ │ └─────────────────────────────────────────────────────── WebKit版本

│ │ │ │ │ └──────────────────────────────────────────────────────────────────── CPU架构

│ │ │ │ └─────────────────────────────────────────────────────────────────────────── 64位系统

│ │ │ └─────────────────────────────────────────────────────────────────────────────────── Windows 10

│ │ └─────────────────────────────────────────────────────────────────────────────────────────────────── 兼容性标识

│ └───────────────────────────────────────────────────────────────────────────────────────────────────── Mozilla版本

└─────────────────────────────────────────────────────────────────────────────────────────────────────────────── 始终以Mozilla开头

📚 User-Agent的组成结构1. 产品标识符 (Product Token)Mozilla/5.0

历史遗留,几乎所有浏览器都以此开头来源于Netscape时代的兼容性需求2. 系统信息 (System Information)(Windows NT 10.0; Win64; x64)

(Macintosh; Intel Mac OS X 10_15_7)

(Linux; Android 13; SM-G991B)

(iPhone; CPU iPhone OS 16_0 like Mac OS X)

包含:

操作系统:Windows、macOS、Linux、Android、iOS系统版本:NT 10.0(Windows 10/11)、Android 13等CPU架构:x64、ARM、Intel等设备型号:手机型号(仅移动端)3. 平台信息 (Platform)AppleWebKit/537.36 (KHTML, like Gecko)

渲染引擎:WebKit、Blink、Gecko、Trident引擎版本:537.36等4. 浏览器信息 (Browser)Chrome/120.0.0.0 Safari/537.36

Firefox/121.0

Edge/120.0.0.0

🚀 User-Agent的实际应用1️⃣ 响应式内容分发// Node.js + Express示例

app.get('/download', (req, res) => {

const ua = req.headers['user-agent'];

if (/Android/i.test(ua)) {

res.redirect('/downloads/app-android.apk');

} else if (/iPhone|iPad/i.test(ua)) {

res.redirect('/downloads/app-ios.ipa');

} else if (/Windows/i.test(ua)) {

res.redirect('/downloads/app-windows.exe');

} else if (/Mac/i.test(ua)) {

res.redirect('/downloads/app-macos.dmg');

} else {

res.redirect('/downloads/app-linux.deb');

}

});

2️⃣ 移动端适配// 检测移动设备

function isMobile(userAgent) {

return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent);

}

// 重定向到移动版网站

app.use((req, res, next) => {

if (isMobile(req.headers['user-agent']) && !req.path.startsWith('/m/')) {

return res.redirect('/m' + req.path);

}

next();

});

3️⃣ 浏览器兼容性处理// React中根据浏览器加载不同的polyfill

function getBrowserInfo(ua) {

const isIE = /MSIE|Trident/.test(ua);

const isEdge = /Edg/.test(ua);

const isChrome = /Chrome/.test(ua) && !isEdge;

const isFirefox = /Firefox/.test(ua);

const isSafari = /Safari/.test(ua) && !isChrome && !isEdge;

return { isIE, isEdge, isChrome, isFirefox, isSafari };

}

// 加载IE专用polyfill

if (getBrowserInfo(navigator.userAgent).isIE) {

import('core-js/stable');

import('regenerator-runtime/runtime');

}

4️⃣ 网站统计分析// Google Analytics风格的用户统计

function trackUserInfo(ua) {

const info = parseUserAgent(ua);

analytics.track({

browser: info.browser.name,

browserVersion: info.browser.version,

os: info.os.name,

osVersion: info.os.version,

device: info.device.type,

timestamp: Date.now()

});

}

5️⃣ 爬虫识别与防护// 识别常见爬虫

function isCrawler(ua) {

const crawlers = [

'Googlebot', 'Bingbot', 'Slurp', 'DuckDuckBot',

'Baiduspider', 'YandexBot', 'facebookexternalhit',

'Twitterbot', 'LinkedInBot', 'WhatsApp'

];

return crawlers.some(bot => ua.includes(bot));

}

// 反爬虫策略

app.use((req, res, next) => {

const ua = req.headers['user-agent'];

// 没有UA或UA异常

if (!ua || ua.length < 10) {

return res.status(403).json({ error: 'Invalid user agent' });

}

// 检测恶意爬虫(非搜索引擎)

if (isSuspiciousBot(ua) && !isCrawler(ua)) {

return res.status(403).json({ error: 'Access denied' });

}

next();

});

6️⃣ A/B测试与灰度发布// 基于浏览器版本的特性开关

function shouldEnableNewFeature(ua) {

const browser = parseBrowser(ua);

// 只对Chrome 100+和Firefox 100+启用新特性

if (browser.name === 'Chrome' && parseInt(browser.major) >= 100) {

return true;

}

if (browser.name === 'Firefox' && parseInt(browser.major) >= 100) {

return true;

}

return false;

}

// 前端代码

if (shouldEnableNewFeature(navigator.userAgent)) {

enableNewFeature();

}

💻 User-Agent解析实战JavaScript解析// 简单解析函数

function parseUserAgent(ua) {

const result = {

browser: { name: '未知', version: '未知' },

os: { name: '未知', version: '未知' },

device: { type: '桌面' }

};

// 解析浏览器

if (/Chrome\/(\d+)/.test(ua)) {

result.browser.name = 'Chrome';

result.browser.version = RegExp.$1;

} else if (/Firefox\/(\d+)/.test(ua)) {

result.browser.name = 'Firefox';

result.browser.version = RegExp.$1;

} else if (/Safari\/(\d+)/.test(ua) && !/Chrome/.test(ua)) {

result.browser.name = 'Safari';

result.browser.version = RegExp.$1;

}

// 解析操作系统

if (/Windows NT (\d+\.\d+)/.test(ua)) {

result.os.name = 'Windows';

result.os.version = RegExp.$1;

} else if (/Mac OS X (\d+[._]\d+)/.test(ua)) {

result.os.name = 'macOS';

result.os.version = RegExp.$1.replace('_', '.');

} else if (/Android (\d+)/.test(ua)) {

result.os.name = 'Android';

result.os.version = RegExp.$1;

}

// 解析设备类型

if (/Mobile|Android/i.test(ua)) {

result.device.type = '手机';

} else if (/iPad|Tablet/i.test(ua)) {

result.device.type = '平板';

}

return result;

}

// 使用示例

const info = parseUserAgent(navigator.userAgent);

console.log(info);

// {

// browser: { name: 'Chrome', version: '120' },

// os: { name: 'Windows', version: '10.0' },

// device: { type: '桌面' }

// }

Node.js专业库npm install ua-parser-js

const UAParser = require('ua-parser-js');

const parser = new UAParser();

const result = parser.setUA(req.headers['user-agent']).getResult();

console.log(result);

// {

// ua: 'Mozilla/5.0...',

// browser: { name: 'Chrome', version: '120.0.0.0', major: '120' },

// engine: { name: 'Blink', version: '120.0.0.0' },

// os: { name: 'Windows', version: '10' },

// device: { vendor: undefined, model: undefined, type: undefined },

// cpu: { architecture: 'amd64' }

// }

Python解析from user_agents import parse

ua_string = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...'

user_agent = parse(ua_string)

print(user_agent.browser.family) # Chrome

print(user_agent.browser.version_string) # 120.0.0

print(user_agent.os.family) # Windows

print(user_agent.os.version_string) # 10

print(user_agent.is_mobile) # False

print(user_agent.is_tablet) # False

print(user_agent.is_pc) # True

🔧 修改和伪造User-Agent浏览器开发者工具Chrome DevTools示例:

1. 打开开发者工具(F12)

2. 点击右上角三点菜单

3. More tools → Network conditions

4. 取消勾选 "Use browser default"

5. 选择预设UA或自定义

JavaScript修改(客户端)// ⚠️ 注意:只能修改navigator.userAgent的读取,无法改变HTTP请求头

Object.defineProperty(navigator, 'userAgent', {

get: function() {

return 'CustomBot/1.0';

}

});

console.log(navigator.userAgent); // CustomBot/1.0

// 但HTTP请求头仍然是真实的UA

HTTP请求中修改// Axios

axios.get('https://api.example.com', {

headers: {

'User-Agent': 'MyApp/1.0.0 (iPhone; iOS 16.0)'

}

});

// Fetch

fetch('https://api.example.com', {

headers: {

'User-Agent': 'MyApp/1.0.0'

}

});

// 注意:浏览器环境下无法修改User-Agent请求头(安全限制)

// 只有在Node.js等服务端环境才能修改

Puppeteer爬虫const puppeteer = require('puppeteer');

(async () => {

const browser = await puppeteer.launch();

const page = await browser.newPage();

// 设置自定义User-Agent

await page.setUserAgent(

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' +

'(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'

);

await page.goto('https://example.com');

// 验证UA

const ua = await page.evaluate(() => navigator.userAgent);

console.log(ua);

await browser.close();

})();

🎯 常见浏览器User-Agent对照表桌面浏览器浏览器User-Agent示例Chrome (Windows)Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36Firefox (Windows)Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0Safari (macOS)Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15Edge (Windows)Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0移动浏览器设备User-Agent示例iPhone (Safari)Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1Android (Chrome)Mozilla/5.0 (Linux; Android 13; SM-G991B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36iPadMozilla/5.0 (iPad; CPU OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1搜索引擎爬虫爬虫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)百度蜘蛛Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)⚠️ User-Agent的局限性与替代方案局限性容易伪造:客户端可以随意修改UA不够准确:浏览器兼容性标识导致解析困难隐私问题:暴露用户设备和系统信息维护成本:需要不断更新解析规则现代替代方案1. Client Hints API// 服务器请求特定信息

// HTTP响应头:

Accept-CH: UA-Platform, UA-Mobile, UA-Arch, UA-Model

// 客户端响应(后续请求自动携带)

Sec-CH-UA: "Chromium";v="120", "Google Chrome";v="120"

Sec-CH-UA-Mobile: ?0

Sec-CH-UA-Platform: "Windows"

Sec-CH-UA-Arch: "x86"

2. Feature Detection(特性检测)// 推荐:检测功能而非浏览器

if ('serviceWorker' in navigator) {

// 支持Service Worker

}

if (typeof IntersectionObserver !== 'undefined') {

// 支持Intersection Observer

}

// 使用Modernizr

if (Modernizr.webp) {

// 支持WebP图片

}

📊 最佳实践✅ 推荐做法优先使用特性检测而非UA嗅探服务端使用成熟的UA解析库(如ua-parser-js)统计分析时记录完整UA便于后续分析爬虫识别结合UA + IP + 行为模式适配处理根据设备能力而非设备型号❌ 避免的做法❌ 过度依赖UA判断(易伪造)❌ 手写复杂的UA解析正则(维护困难)❌ 根据UA阻止特定浏览器访问❌ 在前端做复杂的UA判断逻辑❌ 忽略User-Agent的隐私影响代码示例:综合检测// 综合检测方案

function getClientInfo(req) {

const ua = req.headers['user-agent'];

const hints = {

platform: req.headers['sec-ch-ua-platform'],

mobile: req.headers['sec-ch-ua-mobile'],

};

return {

// 优先使用Client Hints

isMobile: hints.mobile === '?1' || /Mobile|Android/i.test(ua),

platform: hints.platform || detectPlatform(ua),

// UA作为fallback

ua: ua

};

}

🔗 相关工具想要快速解析或生成User-Agent?试试我们的 User-Agent在线分析工具,支持:

🔍 一键解析UA字符串🎲 随机生成各种浏览器UA📱 识别设备、操作系统、浏览器信息📋 批量生成与复制推荐阅读MDN: User-Agent文档Client Hints API详解浏览器指纹识别技术反爬虫策略与实践

相关文章

2017年闰月时间 2017年是润几月
beat365官方入口

2017年闰月时间 2017年是润几月

📅 07-12 👁️ 9072
QGfly的个人资料微博、在哪里直播间 qgfly怎么不上
beat365官方入口

QGfly的个人资料微博、在哪里直播间 qgfly怎么不上

📅 10-14 👁️ 7250
宾得全画幅相机有哪些
beat365官方入口

宾得全画幅相机有哪些

📅 08-27 👁️ 9075
苹果的iOS在哪里?教你轻松找到并了解
365bet.com最快线路检测中心

苹果的iOS在哪里?教你轻松找到并了解

📅 07-15 👁️ 3395
手表/手环无法定位
365bet.com最快线路检测中心

手表/手环无法定位

📅 07-04 👁️ 9880
新手入門必看!AutoCAD超入門詳解
365bet娱乐app

新手入門必看!AutoCAD超入門詳解

📅 07-18 👁️ 9625