express-useragent的Agent指纹字段全解:isMobile、isBot等60+布尔标志一次看懂
2026/8/23 14:48:35 网站建设 项目流程

express-useragent的Agent指纹字段全解:isMobile、isBot等60+布尔标志一次看懂

【免费下载链接】express-useragentNodeJS user-agent middleware项目地址: https://gitcode.com/gh_mirrors/ex/express-useragent

express-useragent 是一个基于 Node.js 的 User-Agent 解析库,自带 Express 中间件和 TypeScript 类型定义。它的核心能力是把一串晦涩的 User-Agent 文本,变成一个结构化的"Agent 指纹"对象(Agent),其中包含isMobile、isBot、isDesktop、isiPhone、isChrome等 60 多个布尔标志,让你无需写正则、不用猜设备,就能准确判断请求来自手机、平板、爬虫还是桌面浏览器。本文带你一次性看懂这些字段。

什么是 Agent 指纹?

当浏览器访问你的网站时,会在 HTTP 头里附上一段 User-Agent 字符串,例如:

Mozilla/5.0 (iPhone; CPU iPhone OS 17_4 like Mac OS X) AppleWebKit/605.1.15 ...

express-useragent 会解析这段字符串,输出一个字段齐全的指纹对象,字段定义见src/express-useragent.ts中的AgentDetails接口(L129-L194)。其中最实用的就是那批isXXX布尔标志——每个标志都是一个"是/否"判断题,直接可用。

如何拿到完整指纹:两种最快接入方式

方式一:直接解析(适合任意 Node 服务)

import { UserAgent } from 'express-useragent'; const parser = new UserAgent().hydrate(uaString); console.log(parser.Agent.isMobile); // true / false

方式二:Express 中间件(推荐)

import express from 'express'; import { express as useragent } from 'express-useragent'; const app = express(); app.use(useragent()); app.get('/', (req, res) => { res.json({ browser: req.useragent?.browser, isMobile: req.useragent?.isMobile, isBot: req.useragent?.isBot, }); });

中间件会把指纹挂到req.useragentres.locals.useragent上,实现代码位于src/index.tsexpress()函数(L29-L60)。完整可运行的示例在examples/server.ts

布尔标志分类速查表 📋

字段太多记不住?按"设备类型 → 系统 → 浏览器 → 爬虫"四组记,覆盖全部核心标志:

1️⃣ 设备类型标志:判断手机、平板、桌面

字段含义典型用途
isMobile是否移动端(手机等)移动端/PC 端分流
isDesktop是否桌面端isMobile互补
isTablet是否平板(iPad / Android 平板 / Kindle Fire)平板专用布局
isAndroidTablet是否 Android 平板(Android UA 中不含 "Mobile")细粒度判断
isMobileNative是否原生 App(Dalvik/OkHttp 特征)区分 App 内 WebView
isSmartTV是否智能电视(Android TV、Apple TV 等)电视端适配

💡 注意:isMobiletrueisDesktop必为false,两者互斥,见src/express-useragent.tstestMobile()方法(L809-L851)。

2️⃣ 操作系统与设备标志:精确到设备型号

字段含义
isiPhone/isiPhoneNativeiPhone 浏览器 / iPhone 原生 App
isiPad/isiPodiPad / iPod
isAndroid/isAndroidNativeAndroid 系统 / Android 原生 App
isWindows/isLinux/isLinux64/isMac/isChromeOS各大桌面系统,isLinux64可识别 64 位 Linux
isWindowsPhone/isBlackberry/isBada/isSamsungWindows Phone / 黑莓 / Bada / 三星设备
isCaptivemacOS 的 CaptiveNetwork 网络探测请求
isRaspberry树莓派等嵌入式设备
isKindleFire/isSilk/silkAcceleratedKindle 系列设备与 Silk 浏览器相关标志
isCurl请求来自 curl 命令行工具

3️⃣ 浏览器标志:识别客户端身份

字段含义
isChrome/isSafari/isFirefox/isEdge四大主流浏览器
isIE/isIECompatibilityMode老版 IE,及 IE 兼容模式(会同时修正 version 字段)
isOpera/isWebkit/isYaBrowserOpera / Apple WebKit 内核 / 俄罗斯 Yandex 浏览器
isPhantomJSPhantomJS 无头浏览器(自动化测试常见)
isElectronElectron 桌面应用(会附带electronVersion字段)
isWechat微信内置浏览器(X5 内核,国内开发者高频用到)
isDuckDuckGoDuckDuckGo 浏览器(结合 Client Hints 识别)
isFacebook/isUCFacebook 客户端 / UC 浏览器
isKonqueror/isOmniWeb/isSeaMonkey/isFlock/isAmaya/isEpiphany其他小众/历史浏览器

4️⃣ 爬虫标志:区分人与机器 🤖

字段含义
isBot是否爬虫/机器人(内置 80+ 爬虫指纹,见src/express-useragent.tsL27-L115)
botName识别出的爬虫名(如googlebotbingbot),非布尔字段
isAuthoritativeUA 是否以标准Mozilla/...开头,false时解析器会做更宽松的猜测
isCurl专门识别 curl 请求

爬虫检测支持 Client Hints 与 UA 双通道;TikTok WebView 中包含 "googleplay" 字样曾被误判为 Google 爬虫,源码中已专门处理该误报(testBot()方法 L776-L803)。大量真实爬虫样本可参考tests/bots.test.ts

实战示例:读懂一条 iPhone Safari 请求

用下面这条真实 UA 解析后(示例输出结构参考 README 中的 Sample payload):

{ "isMobile": true, "isDesktop": false, "isBot": false, "isiPhone": true, "isWebkit": true, "isSafari": true, "isMac": true, "browser": "Safari", "os": "iOS", "platform": "iPhone" }

📌 有个经典"坑":iPhone UA 里含有like Mac OS X,所以isMac也会为true——这是 UA 格式的历史遗留,判断设备类型时优先看isiPhoneisMobile

三个新手最常踩的坑 ⚠️

  1. isTablet不等于"非手机":平板与手机标志可能同时需要单独判断,testTablet()会综合 iPad、Android 平板和 Kindle Fire 得出结论(L859-L867)。
  2. isBottrue时看botName:布尔值只告诉你"是爬虫",botName才告诉你"是哪个爬虫",方便做针对性拦截或放行。
  3. 带请求头解析更准new UserAgent().hydrateFromHeaders(ua, headers)会额外解析 User-Agent Client Hints 头,能识别靠 UA 字符串识别不出的浏览器(如 Chromium 版 DuckDuckGo),推荐优先使用。

相关代码位置

  • 核心解析器与全部字段定义:src/express-useragent.ts
  • Express 中间件实现:src/index.ts
  • 爬虫/Android/macOS 等分类测试用例:tests/bots.test.tstests/android.test.tstests/macos.test.ts
  • 浏览器端使用入口:src/browser.ts
  • 快速上手示例:examples/simple.tsexamples/server.tsexamples/http.ts

小结

express-useragent 的 Agent 指纹把"猜设备"变成"查字段":设备类型组(isMobile / isTablet / isSmartTV)管分流,操作系统组(isMac / isWindows / isAndroid)管适配,浏览器组(isChrome / isSafari / isWechat)管兼容,爬虫组(isBot / botName / isCurl)管安全。配合 Express 中间件一行接入,你的站点就能对每一位访问者"一目了然"。

【免费下载链接】express-useragentNodeJS user-agent middleware项目地址: https://gitcode.com/gh_mirrors/ex/express-useragent

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询