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 运行的兼容模式。 |
"长按二维码" 或 "扫一扫" 关注 "德云社区" 微信公众号
版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。
|