| User Agent - HTTP服务器识别OS操作系统 Web浏览器版本的用户代理 
 User-Agent 英文简称 UA,中文译为 “用户代理”。User-Agent 是 HTTP 协议的一部分,属于请求头域。 
 User-Agent 是向访问网站提供所用浏览器类型及版本、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件、等信息的一特殊字符串头标识。 
 User-Agent 字符串在每次浏览器进行 HTTP 请求时,会被发送到服务器! 
 某些网站常通过判断 User-Agent 来给不同操作系统、不同浏览器发送不同页面;因此,可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 User-Agent 可绕过此种检测。 user-agent 作用
 
 01、统计用户浏览器使用情况 有些浏览器说被多少人使用了,实际上就可通过判断每个IP 的 UA 来确定这个 IP 是用什么浏览器访问的,以得到使用量的数据。 
 02、根据用户使用浏览器的不同,显示不同的排版从而为用户提供更好的体验 有些网站会根据这个来调整打开网站的类型,如是手机就打开 wap,非手机的就打开 pc 常规页面。用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的 UA 来判断的。 
 
 03、伪装 user agent 以回避某些侦测特定浏览器才能读取的网站 如使用 Firefox 浏览器插件 User agent switcher,用户可轻松在不同 UA 之间切换,把自己伪装成其他浏览器。这样就可在 PC 上预览 WAP 或移动格式的网页,譬如:专为 iPhone 设计的页面。 
 软件仓库
 https://github.com/digitser
 https://digitser.sourceforge.io/ https://pan.baidu.com/s/1TV70__Be1ta0ney1-tudFQ 
 自动 "批量" 采集下载 "静态 动态网站" 内容的 "数据采集" 工具 http://collect.digitser.cn/ http://forum.digitser.cn/thread-2253-1-1.html user-agent 值
 
 ASP.NET 使用 Request.Header["User-Agent"] 或 Request.UserAgent 
 Java 使用 request.getHeader(”User-Agent”) 
 Python 使用 Request.headers.get("User-agent") 
 PHP 使用:$_SERVER[HTTP_USER_AGENT]; 
 JS 使用 navigator.userAgent 
 User-Agent 字符串范例 | 渲染引擎 | 浏览器 | User-Agent | 说明 | 备注 |  | Gecko | Firefox | Mozilla/MozillaVersion (Platform; Encryption; OS-or-CPU; Language; PrereleaseVersion)Gecko/GeckoVersion ApplicationProduct/ApplicationProductVersion | 
 | Gecko 首次开发是作为 Mozilla 浏览器 Netscape 6 的一部分。Netscape 6 的user-agent 字串结构是面向未来的,新版本反应出从 4.x 版本的简单变得较为复杂。 |  | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.4) Gecko/20011128 Netscape6/6.2.1 | Windows XP 中的 Netscape 6.21 | Mozilla 版本 5.0 从首款 Gecko 发布后就一直未变,且以后有可能也不会变。 |  | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11 | 在 Windows XP 中的 Firefox 2.0.0.11 |  | Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1b2) Gecko/20060823 SeaMonkey/1.1a | 在 Linux 中的 SeaMonkey 1.1a |  | Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en; rv:1.8.1.6) Gecko/20070809 Camino/1.5.1 | Mac OS X 中的 Camino 1.5.1 |  | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0 | dts 运行在 Windows 7 64 位上的 Firefox 47.0 
 |  | Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0 | dts 运行在 Windows 7 64 位上的 Firefox 47.0 64位版 |  | WebKit | Safari | Mozilla/5.0 (Platform; Encryption; OS-or-CPU; Language) AppleWebKit/AppleWebKitVersion (KHTML, like Gecko) Safari/SafariVersion | 2003 年 Apple 宣布发布首款自主开发的 web 浏览器:Safari。WebKit 是 Linux 中 web 浏览器 Konqueror 呈现引擎 KHTML 的一个分支,几年后,WebKit 的开源吸引了呈现引擎的开发人员。 这款新浏览器和呈现引擎的开发人员也遇到了曾经 IE 3.0 类似的问题:怎样才能溶入主流而不被踢出局?答案是:在 user-agent 字串中放详尽的信息,以骗取网站的信任使它与其它流行浏览器兼容。
 凡是基于 WebKit 的浏览器都将自己伪装成 Mozilla 5.0,与基于 Gecko 浏览器完全一样。
 
 |  | Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125.1 | 既有 Apple WebKit 版本,也有 Safari 版本。Safari 版本是浏览器构建版本号 (build number),Safari 1.25 在 user-agent 字串中号为 125.1。(KHTML, like Gecko) 在 Safari 1.0 预览版本中就有了,这是最耐人寻味又饱受诟病。 |  | Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.0.3 Safari/522.15.5 | Apple 的野心是为让开发人员把 Safari 当成 Gecko,所以采取了当初微软 IE user-agent 的类似做法:Safari 是兼容 Mozilla 的,否则 Safari 用户会认为用的浏览器不受支持。 而其它基于 WebKit 的浏览器与 Safari 不同的是,没有上面说的这个情况,所以检测断定浏览器是否基于 WebKit 比看有没有明确标 Safari 更有用。
 
 |  | Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-cn) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 | 
 |  | Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) Version/5.1.3 Safari/534.34 
 | dts 运行在 Windows 7 64 位上的 safari 5.1.3 |  | Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/534.34 (KHTML, like Gecko) Version/5.1.3 Safari/534.34 
 | dts 运行在 Windows 7 64 位上的 safari 5.1.3 64位版 |  | KHTML | Konqueror | Mozilla/5.0 (compatible; Konqueror/Version; OS-or-CPU)Konqueror 3.2 | Konqueror 是款在 KDE Linux 桌面环境中的浏览器,基于 KHTML 开源呈现引擎。它只发布了 Linux 版本,但拥有活跃用户群。为了兼容性最大化,user-agent 字串格式也紧跟 IE 后尘。 |  | Mozilla/5.0 (compatible; Konqueror/Version; OS-or-CPU) KHTML/KHTMLVersion (like Gecko) | 为与 WebKit user-agent 字串变化保持一致,它将 KHTML 作为它的标识。 |  | Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.0 (like Gecko) | Konqueror 和 KHTML 的版本号比较一致,唯一的区别就是这点不同,比如 Konquerer 3.5、KHTML 3.5.1。 |  | WebKit | Chrome | Mozilla/5.0 (Platform; Encryption; OS-or-CPU; Language) AppleWebKit/AppleWebKitVersion (KHTML, like Gecko) Chrome/ChromeVersion Safari/SafariVersionChrome 0.2 | Google Chrome 浏览器以 WebKit 作为呈现引擎,JavaScript 引擎却用了另一种。最初发布版本是 0.2,它的 user-agent 字串格式是在 webKit 信息的基础上增加一些信息。 |  | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13 | 
 | 
 |  | Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 
 | dts 运行在 Windows 7 64 位上的 Chrome 41.0.2228.0 | 
 |  | Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 | dts 运行在 Windows 7 64 位上的 Chrome 41.0.2228.0 64位版 | 
 |  | 
 | Opera | Opera/Version (OS-or-CPU; Encryption) [Language] | Opera 8.0 之前版本 | Opera 浏览器默认 user-agent 字串是现代浏览器中最合理的 ── 正确的标识了它自己及其版本。 
 |  | Opera/7.54 (Windows NT 5.1; U) [en] | Windows XP 中 Opera 7.54 |  | Opera/Version (OS-or-CPU; Encryption; Language) | 
 | Opera 8 把 user-agent 字串的语言部分移到了括号内。 |  | Opera/8.0 (Windows NT 5.1; U; en) | 在 Windows XP 中 Opera 8 |  | Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50
 | 前一字串将 Opera 9.5 标识为 Firefox 2。后一字串将 Opera 9.5 标识为 IE 6,在两个字串中都带有 Opera 版本信息。虽然这种方式是作为 Firefox 或 IE 打开的,但也能识别出 Opera。另一种方法则是浏览器 user-agent 字串标识伪装成 Firefox 或 IE,同时也找不到“Opera”字串及其版本信息。这样从字面上去区分 Opera 浏览器便成了“不可能完成的任务”。 | 当时 Opera 做为主流浏览器之一,它的 user-agent 字串是唯一使用产品名称和版本完全真实的标识了它自己。但是由于大量的浏览器嗅探代码在 Internet 上像蝗虫飞过般只吃标 Mozilla 产品名的user-agent 字串,造成了 Opera 的user-agent 字串发生了完全的改变。 Opera 9 user-agent 字串有 2 种修改方式:一种方式是将自己标识为 Firefox 或 IE 浏览器。在这种方式下,user-agent 字串与 Firefox 或 IE 的几乎一样,只不过末尾附加了“Opera”及版本号。
 
 |  | 06 | Trident | IE | Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0) | IE 10 运行于 32 位 Win8 
 | 
 |  | Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0) | IE 10 运行于 64 位 Win8 | 
 |  | Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch) | "Touch" 表示 IE 10 运行于支持触摸的 Win8 系统 
 | 
 |  | Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0) | dts 的 IE 10 运行于 32 位 Win7 | 
 |  | Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Win64; x64; Trident/6.0) | dts 的 IE 10 运行于 64 位 Win7 | 
 | 
 
 user-agent 字串史可说明曾对 user-agent 嗅探说不的原因: 
 IE 想要将自己识别为 Netscape 4,Konqueror 和 WebKit 想要识别为 Firefox,Chrome 想要识别为 Safari。这样使得除 Opera 外所有浏览器的user-agent 嗅探区别很小,想要从一堆茫茫浏览器海洋中找出有用的标识太少了。关于嗅探要记住:一款浏览器与其它浏览器是兼容的,这样造成了不能完全准确断定是哪款浏览器。
 比如 Chrome ,它声称任何可在 Safari 3 访问的网站 Chrome 也都可访问,但是对检测 Chrome 没有一点用。为了浏览器的兼容 ── 这便是这个声明的理由。
 浏览器 User-Agent 字符串格式
 不同浏览器会有所不同,但大体格式如下:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息 
 操作系统标识 | 操作系统类型 | 操作系统标识 | 说明 | 备注 |  | FreeBSD | X11; FreeBSD (version no.) i386 |  |  |  | X11; FreeBSD (version no.) AMD64 |  |  |  | Linux | X11; Linux ppc |  |  |  | X11; Linux ppc64 |  |  |  | X11; Linux i686 |  |  |  | X11; Linux x86_64 |  |  |  | Mac | Macintosh; PPC Mac OS X |  |  |  | Macintosh; Intel Mac OS X |  |  |  | Solaris | X11; SunOS i86pc |  |  |  | X11; SunOS sun4u |  |  |  | Windows | Windows NT 10.0 | 对应操作系统 windows 10 |  |  | Windows NT 6.3 | 对应操作系统 windows 8.1 |  |  | Windows NT 6.2 | 对应操作系统 windows 8 |  |  | Windows NT 6.1 | 对应操作系统 windows 7 |  |  | Windows NT 6.0 | 对应操作系统 windows vista |  |  | Windows NT 5.2 | 对应操作系统 windows 2003 |  |  | Windows NT 5.1 | 对应操作系统 windows xp |  |  | Windows NT 5.0 | 对应操作系统 windows 2000 |  |  | Windows ME | 
 |  |  | Windows 98 | 
 |  |  | Windows 95 | 
 |  | 
 
 加密等级标识 | 加密等级标识 | 说明 | 备注 |  | N | 表示无安全加密 | 
 |  | I | 表示弱安全加密 | 
 |  | U | 表示强安全加密 | 
 | 
 
 浏览器语言 | 浏览器 | 浏览器语言 | 说明 | 备注 |  | IE | en 
 | 英语 
 | IE-->工具-->Internet 选项-->外观-->语言 |  | en-US 
 | 英语(美国) 
 |  | zh 
 | 中文 
 |  | zh-CN 
 | 中文(简体,中国) 
 |  | Firefox 
 | en | 英语 | Firefox-->工具-->选项-->内容-->语言 |  | en-us | 英语/美国 |  | zh | 中文 |  | zh-cn | 中文/中国 |  | Chrome | 
 | 
 | Chrome-->设置-->高级设置-->语言 |  | Opera | 
 | 
 | 
 | 
 渲染引擎标识
 
 浏览器若使用 Presto 渲染引擎,格式为:Presto/版本号 
 渲染引擎标识 | 浏览器 | 渲染引擎标识 | 备注 |  | IE 
 | Trident/4.0 
 | IE  8.0 
 |  | Trident/5.0 
 | IE  9.0 
 |  | Trident/6.0 
 | IE 10.0 
 |  | Firefox | Gecko | 
 |  | Chrome | 
 |  |  | Opera | 
 |  | 
 浏览器版本信息
 
 浏览器真实版本信息,格式为:Version/版本号 
 浏览器版本信息 | 浏览器 | 浏览器版本信息 | 备注 |  | IE 
 | MSIE 9.0 | IE 9.0 
 |  | MSIE 10.0 | IE 10.0 
 |  | Firefox | Firefox/39.0 | Firefox 39.0 
 |  | Chrome | 
 | 
 |  | Opera | 
 | 
 | 
 
 | 时间 | 事件 | user-agent | 说明 | 备注 |  | 1993 年 | NCSA 发布首款 web 浏览器 Mosaic。 | Mosaic/0.9 | 斜杠前是产品名称 (可能会显示为 NCSA Mosaic 或其它类似字串),斜杠后是产品版本号 
 | 虽然当时,Mosaic 对操作系统和平台是有依赖性的,但基本格式还是很简单明了。 
 |  | 1995 年 | Netscape Communications 开发出了 web 浏览器 Mozilla (当时号称 “Mosaic 杀手”)。 | Mozilla/Version [Language] (Platform; Encryption) Netscape | user-agent 字串前半部分使用了产品名称和产品版本,但后面增加了下列信息:Language:应用程序语言;Platform:操作系统/平台;Encryption:安全加密类型; 
 | Encryption 值可能是 U (128 位加密)、I (40 位加密)、N (没加密)。 
 |  | 首次公开发行 Netscape Navigator 2。 | Mozilla/2.02 [fr] (WinNT; I) | Netscape Navigator 2.02 、法语 、Windows NT 、40位加密。 
 | 在当时,通过 user-agent 字串中的产品名称,可正确判断使用的是哪种 web 浏览器。 
 |  | 1996年 | 发布 Netscape Navigator 3 
 | Mozilla/Version (Platform; Encryption [; OS-or-CPU description]) | user-agent 字串去掉了语言部分,多放了个操作系统或 CPU 的可选信息。 
 | Netscape Navigator 3 远远超过 Mosaic,成为当时最流行的 web 浏览器。 
 |  | Mozilla/3.0 (Win95; U) | Netscape Navigator 3 、Windows 95 、128 位加密。 
 | 在 Windows 系统,user-agent 字串可能不会显示 OS 或 CPU 的信息。 
 |  | 1996年 | Netscape Navigator 3 发布不久,微软发布 IE 3 | Mozilla/2.0 (compatible; MSIE Version; Operating System) | 
 | Netscape 是当时的首选浏览器,大多数服务器在加载页面前会检查 user-agent 是否为该款浏览器。IE 如不兼容 Netscape user-agent 字串,使用 IE 的用户就打不开这些页面。 
 |  | Mozilla/2.0 (compatible; MSIE 3.02; Windows 95) | Windows 95 中的 IE 3.02 
 | 由于当时的浏览器嗅探只查 user-agent 字串中的产品名称部分,结果 IE 摇身一变被识别成了 Mozilla,伪装成了 Netscape Navigator。从此以后,浏览器真正的版本埋没在了字串的中间。 
 |  | 1997年 | Netscape Communicator 4 发布(名称中 Navigator 换成了 Communicator) | Mozilla/Version (Platform; Encryption [; OS-or-CPU description]) | 
 | user-agent 字串格式与 3 版一致。 
 |  | Mozilla/4.0 (Win98; I) | Windows 98 中 4 版的 user-agent 字串 
 | Netscape 浏览器在更新时,版本也相应增加。 |  | Mozilla/4.79 (Win98; I) |  | 1997年 | 微软发布 IE 4 
 | Mozilla/4.0 (compatible; MSIE Version; Operating System) |  | 
 |  | Mozilla/4.0 (compatible; MSIE 4.0; Windows 98) | Windows 98 中 IE 4 版的 user-agent 字串 | Mozilla 版本与 IE 实际版本一致,这样就可识别第 4 代浏览器。 |  | Mozilla/4.0 (compatible; MSIE 4.5; Mac_PowerPC) | IE 4.5 只发布 Mac 平台,虽然 Mozilla 版本仍是 4 | 此后,IE 版本一直到 7 都沿用此模式。 |  | 2009年 | 微软发布 IE 8 
 | Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0) | 新增渲染引擎标识,这样 IE8 以 MSIE 7.0 兼容模式运行时,Trident 版本保持不变,而原先 IE7 的 user-agent 字串不包括 Trident 版本。 | 这样可区分 IE7 与 IE8 运行的兼容模式。 | 
 
 "长按二维码" 或 "扫一扫" 关注 "德云社区" 微信公众号 版权声明:
 本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。
 
 |