浏览器User-Agent
HttpHeader之User-Agent
UA 串的发展史
1990 年,Tim Berners-Lee 编写了第一个浏览器 WorldWideWeb,后来改名为 Nexus。但是,Nexus 只支持文字展示。
1993 年,美国 NCSA 组织开发了 Mosaic 浏览器,能支持图片的展示使其成为第一款流行的浏览器。
这时候问题就来了,Nexus 不支持图片展示,而 Mosaic 是支持的。作为开发人员,该怎么编写页面代码呢?这时候 ua 串就可以发挥作用了,开发人员仅需针对 Mosaic ua 串的请求输出图片展示相关的代码即可。Mosaic 的 ua 串样本如下:
NCSA_Mosaic/1.0 (Windows 3.1)
其中 NCSA_Mosaic/1.0 为浏览器代号及其版本号,Windows 3.1 为操作系统及其版本号。
随后,1994 年,Mosaic 团队的领导者 Marc Andreessen 辞职并成立了自己的公司——Netscape,并开发了 Netscape Navigator 浏览器。它的内部代号为「Mozilla」,ua 串样本如下:
Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98)
Netscape Navigator 的市场占有率一度达到 90%,并且最先支持了框架(frame)特性。开发人员为了区别这两个浏览器,还是用的 ua 串识别这个方式。如果 ua 串中浏览器代号为 Mozilla,那就发送包含框架的页面,否则,就发送不含框架的页面。
再后来,1995 年,微软推出了 Internet Explorer(下文简称 IE)。IE 也支持框架,但因为过去的框架代码都是针对 Mozilla 这个代号发送的,这样一来,IE 即使支持框架,也收不到包含框架的代码。让所有的开发人员把自己的代码都改一遍明显不现实,最后 IE 只好“自称” Mozilla,同时在 ua 串的其他位置增加自己的代号 MSIE。它的 ua 串样本如下:
Mozilla/4.0 (compatible; MSIE 1.0; Windows 3.11)
IE 在浏览器市场中逐渐成为了霸主,败北的 Netscape Navigator 另起炉灶,开发了 Firefox。无论是 IE、Netscape Navigator 还是 Firefox,ua 串都以 Mozilla 代号开头。这也几乎成为了浏览器 ua 串事实上的格式标准:
Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]
时至今日,ua 串承载的内容越来越多,开发人员识别起来的难度也越来越高了。
一个现代浏览器的 ua 串样本如下:
Mozilla/5.0 (Linux; U; Android 9; zh-CN; vivo Z1i Build/PKQ1.180819.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.8.5.1065 Mobile Safari/537.36
对其进行“人工”智能分析后可知:
- 操作系统为 Android,版本号为 9;
- 设备品牌为 vivo,型号为 Z1i;
- 浏览器内核是 Chrome,版本号为 57.0.2987.108;
- 客户端(浏览器)是 UC 浏览器,版本号是 12.8.5.1065。
那怎么通过程序把这些信息识别出来呢?
操作系统的识别
Windows
Windows 是最常见的桌面系统,它的 ua 串样本如下:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
识别特征是「Windows NT <版本号>」,其中 Windows NT 是 Windows 的内核代号(从 Windows 2000 开始,用的都是这个内核)。内核版本号与 Windows 版本的对应关系如下:
内核版本号 | Windows 版本 |
---|---|
Windows NT 5.0 | Windows 2000 |
Windows NT 5.1 | Windows XP |
Windows NT 5.2 | Windows 2003 |
Windows NT 6.0 | Windows Vista |
Windows NT 6.1 | Windows 7 |
Windows NT 6.2 | Windows 8 |
Windows NT 6.3 | Windows 8.1 |
Windows NT 10.0 | Windows 10 |
除了以上的 Windows 版本,还有像 Windows 3.1、Windows 95、Windows 98、Windows ME 这些历史悠久的版本,以及移动端的 Windows 系统,如非必要就不用特地去识别了。
macOS
另一个常见的桌面系统是 macOS,它是 Mac 电脑上的操作系统。UA 串特征是「Mac OS X <版本号>」。UA 串样本如下:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko)
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko)
要提一下的是,macOS 原名 OSX,2016年改名为 macOS。但是在 ua 串上只是版本号的区别。
iOS
iOS 是 iPod、iPhone 以及 iPad 的操作系统。它的 ua 串样本如下:
Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.18(0x17001231) NetType/WIFI Language/zh_CN
Mozilla/5.0 (iPad; CPU OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.18(0x17001231) NetType/WIFI Language/zh_CN
UA 串特征是「OS <版本号> like Mac OS X」。可以发现,macOS 以及 iOS 的 ua 串特征都包含了「Mac OS X」,所以在识别的时候,要先判定是否 iOS 再判定是否 macOS。
随着苹果产品的更新迭代,出现了更大尺寸的 iPad,其屏幕尺寸更接近于桌面设备的屏幕尺寸。所以,从 iOS 13 起,除了 iPad Mini,其他 iPad 的系统设置中的「请求桌面网站」开关默认开启。
于是,iPad(除了 iPad Mini)的默认 ua 串变得跟 Mac 电脑的一模一样。幸好,目前还没有可触屏的 Mac 电脑,在前端检测最大触点数(navigator.maxTouchPoints > 0)还是可以区分出 iPad 与 Mac 电脑。
Android
另外一个市场占有率比较高的移动设备操作系统是 Android。它的 ua 串样本如下:
Mozilla/5.0 (Linux; U; Android 10; zh-CN; PCHM30 Build/QKQ1.200209.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.1.2.1092 Mobile Safari/537.36
UCWEB/2.0 (MIDP-2.0; U; Adr 4.1.2; id; GT-S6310) U2/1.0.0 UCBrowser/11.2.0.1125 U2/1.0.0 Mobile
UA 串特征主要是「Android <版本号>」,但也有一部分设备或浏览器用的是「Adr <版本号>」。
Linux
Linux 系统一般用于服务器,它的 ua 串样本如下:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36
Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:24.0) Gecko/20100101 Firefox/24.0
Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0
主要的 ua 串特征是「Linux」。然而,Android 也是基于 Linux 的,也会包含 「Linux」关键词。所以,要确认是否服务器或桌面端的 Linux,还要结合「Linux」后面的「x86、i586、i686」去做判定。最终的 ua 串特征就是「Linux <x86|ix86>」。
PC 浏览器的识别
Firefox
Firefox 的 ua 串样本如下:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0
它的 ua 串特征是最简单的,就是「Firefox/<版本号>」。
Internet Explorer(IE)
在 IE 的历史中,有一条分界线,那就是 IE 10 这个版本。究其原因,是因为 IE 10 以及之后的版本,对 W3C 标准有比较好的支持,微软不希望开发者将其当成旧版的 IE 看待,所以在 ua 串上做了区分。
IE 10 以下的版本(不包括 10),ua 串样本如下:
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0)
UA 串特征为「MSIE <版本号>」。
IE 10 及以上版本,ua 串样本如下:
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
UA 串特征为「Trident/<内核版本号>; rv:<浏览器版本号>」。
Safari
早期的 Safari 是有 Windows 版本的,后来变成了苹果设备的专属浏览器。它的 ua 串样本如下:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15
Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Mobile/15E148 Safari/604.1
UA 串特征为「Version/<浏览器版本号>...Safari/<内核版本号>」。但是,Safari 浏览器的识别并没有这么简单。
Chrome
Chrome 的早期版本,使用的是苹果的 WebKit 渲染引擎,但是从 28 这个版本开始,改为用自家的 Blink 渲染引擎。但是它的 ua 串特征没有变化,只是版本号上的区别。Chrome 的 ua 串样本如下:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4315.4 Safari/537.36
UA 串特征均为「Chrome/<版本号>」。但是,大家可以发现,Chrome 的 ua 串包含了 Safari 的 ua 串特征!勿急,接着往下看。
Opera
Opera 原来使用的渲染引擎是 Presto,它的 ua 串样本如下:
Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14
UA 串特征是「Opera/<版本号>」。
从 15 这个版本开始,Opera 改为用 Blink 渲染引擎,ua 串样本如下:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 OPR/72.0.3815.400
UA 串特征是「OPR/<版本号>」。此时,大家又可以发现,Opera 的 ua 串包含 Chrome 以及 Safari 的 ua 串特征。
Edge
与 Opera 类似,Edge 也更换过渲染引擎。原来使用的是微软自家的 EdgeHTML,ua 串样本如下:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363
UA 串特征是「Edge/<版本号>」。
后来改为用 Blink 渲染引擎,ua 串样本如下:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60
特征是「Edg/<版本号>」(注意,是 Edg,不是 Edge,少了个 e)。此时,大家可以再次发现,Edge 的用户代理字符串也包含了 Chrome 以及 Safari 的 ua 串特征。
Chromium 的壳
目前 Chrome、Edge、Opera,以及国内的好些 PC 浏览器,都是基于 Chromium 进行开发的。它们的 ua 串都会包含 Chrome 以及 Safari 的特征:
Mozilla/5.0 (Linux; U; Android 10; zh-CN; PCHM30 Build/QKQ1.200209.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.1.2.1092 Mobile Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/5.1.0.4000 Chrome/55.0.2883.75 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 TheWorld 7
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 QIHU 360SE/13.1.1618.0
但同时,这些浏览器也有自己的 ua 串特征:
浏览器 | ua 串特征 |
---|---|
UC 浏览器 | UCBrowser/<版本号> |
傲游浏览器 | Maxthon/<版本号> |
世界之窗 | TheWorld <版本号> |
360 浏览器 | QIHU 360SE/<版本号> |
其中 360 浏览器的 ua 串比较有意思。360 跟腾讯发生过一次 3Q 大战。腾讯根据 360 浏览器的 ua 特征封锁了来自 360 浏览器的访问。后来,360 浏览器就调整为:只有访问自家产品以及合作网站的时候,才会在 ua 串中增加自己的特征串。
虽然 3Q 大战已经过去很多年,但 360 浏览器仍然没有针对所有网站开放自己的特征串。不过,在其极速模式下,会存在一个叫做 qihoo 的全局变量。可以通过判断 window.qihoo 是否存在,从而得知当前浏览器是否 360 浏览器。
综上所述:
- 要知道一个浏览器是否为 Chrome,先要把其他基于 Chromium 的浏览器排除掉;
- 要知道一个浏览器是否为 Safari,要把所有基于 Chromium 的浏览器排除掉。
所以识别流程应为:
- 如果带有“壳”的 ua 串特征,则为对应“壳”的浏览器;
- 如果没有“壳”的 ua 串特征,但是有 Chrome 的 ua 串特征,则为 Chrome;
- 如果没有 Chrome 的 ua 串特征,但是有 Safari 的 ua 串特征,则为 Safari。
这里面的主要问题在于,“壳”的特征串没有固定的格式,在 ua 串中也没有固定的位置。所以“壳”的 ua 串特征库,是需要根据实际需求去持续更新的。
移动端浏览器
移动端有两种常见的网页浏览方式,一种是在浏览器中打开,另一种是在 app 中通过 WebView 打开。不过严格来说,浏览器也是一种 app,也是通过 WebView 去打开网页。
先看看 iOS 的情况。苹果不允许在移动设备上使用第三方浏览器内核,所以 iOS 上的第三方 app,其实都是调用系统提供的 WebView。这样做的好处在于,可以在所有 app 中保持网页渲染效果的一致性。
iOS 提供系统提供的 WebView 有两种:WKWebView 和 UIWebView。前者是 iOS 8 开始提供的性能比较高的 WebView,后者则是性能比较低、逐渐被淘汰的。时至今日,作为默认浏览器的 Safari 用的自然是 WKWebView,但第三方 app,可以在两种 WebView 之间自行选择。
Android 是一个比较开放的系统,它允许 app 调用系统 WebView,或者使用第三方的浏览器内核。几个常用的 app——UC 浏览器、QQ 浏览器、微信,它们的内核要么基于 WebKit 修改而来,要么基于 Blink 修改而来。所以,它们的 ua 串大多都带有 Safari 或者 Chrome 的 ua 串特征,并且,因为经过魔改,网页渲染效果或多或少都有一些差异。
PC 端的浏览器大部分都有对应的移动端 app,ua 串特征也是一致的,就不重复介绍了。接下来主要聊一下非浏览器 app。
微信
微信的 ua 串样本如下:
Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.4(0x17000428) NetType/WIFI Language/zh_CN
Mozilla/5.0 (Linux; Android 9; MHA-AL00 Build/HUAWEIMHA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36 MMWEBID/9772 MicroMessenger/7.0.6.1460(0x27000634) Process/tools NetType/WIFI Language/zh_CN
UA 串特征为「MicroMessenger/<版本号>」。
后来,微信团队又发布了企业微信。UA 串样本为:
Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 wxwork/2.1.5 MicroMessenger/6.3.22
Mozilla/5.0 (Linux; Android 9.0; BKL-AL20 Build/HUAWEIBKL-AL20; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044409 Mobile Safari/537.36 wxwork/2.7.2 MicroMessenger/6.3.22 NetType/WIFI Language/zh
企业微信的 ua 串里面包含微信的特征串,同时也有自己的特征串「wxwork/<版本号>」。所以,在代码流程上,要先判断是否企业微信,再判断是否微信。
手机 QQ 的 ua 串样本如下:
Mozilla/5.0 (Linux; Android 9; ONEPLUS A6000 Build/PKQ1.180716.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044704 Mobile Safari/537.36 V1_AND_SQ_8.0.7_1204_YYB_D QQ/8.0.7.4085 NetType/4G WebP/0.3.0 Pixel/1080 StatusBarHeight/80
Mozilla/5.0 (iPhone; CPU iPhone OS 14_4_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/18D70 QQ/8.7.8.635 V1_IPH_SQ_8.7.8_1_APP_A Pixel/1125 MiniAppEnable SimpleUISwitch/0 StudyMode/0 QQTheme/1000 Core/WKWebView Device/Apple(iPhone X) NetType/4G QBWebViewType/1 WKType/1
UA 特征为「QQ/<版本号>」。注意,QQ 的 ua 串也包含移动端 QQ 浏览器的 ua 串特征「MQQBrowser/<版本号>」。
设备品牌的识别
与很多桌面端设备不同,移动设备的浏览器 ua 串大多包含品牌信息。例如:
Mozilla/5.0 (Linux; U; Android 8.0.0; zh-CN; HUAWEI NXT-AL10 Build/HUAWEINXT-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.6.6.1046 Mobile Safari/537.36
Mozilla/5.0 (Linux; Android 8.1.0; OPPO R11t Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/18.0)
其中品牌信息分别为「HUAWEI」(华为)、「OPPO」(Oppo)这两个品牌词。这样一来,想从 ua 串中识别设备品牌,似乎只需要维护一个品牌词的特征库就可以了。
然而,有一部分设备或者浏览器,ua 串中仅有型号,没有品牌词。例如:
Mozilla/5.0 (Linux; U; Android 4.4.2; zh-CN; SM-N9006 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.0.7.1087 Mobile Safari/537.36
Mozilla/5.0 (Linux; U; Android 10; zh-CN; PCHM30 Build/QKQ1.200209.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.1.2.1092 Mobile Safari/537.36
其中型号分别为「SM-N9006」(三星)、「PCHM30」(Oppo)。这坑可就大了,常见品牌只是数十个的量级,但它们的型号总数起码是数万的量级,而且会不断增加。
所以设备品牌的识别,需要把两者结合起来:
- 先通过品牌词去识别,如果都匹配不上,则进入下一步。
- 通过“人工”智能,汇总剩余 ua 串的型号,通过搜索引擎查询到型号对应的品牌,并编写品牌的型号规则。
对于型号的识别,建议抓大放小,忽略量小的型号。并且,随着各种设备的推陈出新,其市场占有率的变化也是比较大的,需要及时更新识别规则。
广告时间
如果你有 ua 串识别的需求,又不想去处理以上的这些复杂情况,可以使用 @just4/ua-info 这个 JS 库。它可以从 ua 串中识别出常见的操作系统、浏览器内核、客户端、设备品牌等信息。
import { getCurrentUAInfo } from '@just4/ua-info';
const uaInfo = getCurrentUAInfo();
uaInfo.os.isWindows; // 是否 Windows 系统
uaInfo.os.isAndroid; // 是否 Android 系统
uaInfo.browser.isIE; // 是否 IE 浏览器核心
uaInfo.browser.isChrome; // 是否 Chrome 浏览器核心
uaInfo.client.isWx; // 是否微信
uaInfo.client.isUCBrowser; // 是否 UC 浏览器
uaInfo.brand.isApple; // 是否苹果设备
uaInfo.brand.isHuawei; // 是否华为设备
此外,还可以对操作系统、浏览器内核、客户端的版本号进行对比:
uaInfo.os.isWindows && uaInfo.os.version.gt('5.2');
uaInfo.browser.isIE && uaInfo.browser.version.gte('10');
uaInfo.client.isUCBrowser && uaInfo.client.version.lt('14');
UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;例如用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的UA来判断的。UA可以进行伪装。
浏览器的UA字串的标准格式:浏览器标识(操作系统标识;加密等级标识;浏览器语言)渲染引擎标识版本信息。但各个浏览器有所不同。
字串说明:
1、浏览器标识
出于兼容及推广等目的,很多浏览器的标识相同,因此浏览器标识并不能说明浏览器的真实版本,真实版本信息在UA字串尾部可以找到。
2、操作系统标识
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 6.1 对应windows7
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
3、加密等级标识
N:表示无安全加密
I:表示弱安全加密
U:表示强安全加密
4、浏览器语言
在首选项>常规>语言中指定的语言
5、渲染引擎
显示浏览器使用的主流渲染引擎有:Gecko、WebKit、KHTML、Presto、Trident、Tasman等,格式为:渲染引擎/版本信息
6、版本信息
显示浏览器的真实版本信息,格式为:浏览器/版本信息
浏览器User-Agent的详细信息
PC端:
safari5.1–MAC
User-Agent:Mozilla/5.0(Macintosh;U;IntelMacOSX10_6_8;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50
safari5.1–Windows
User-Agent:Mozilla/5.0(Windows;U;WindowsNT6.1;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50
IE9.0
User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;
IE8.0
User-Agent:Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0;Trident/4.0)
IE7.0
User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.0)
IE6.0
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1)
Firefox4.0.1–MAC
User-Agent:Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:2.0.1)Gecko/20100101Firefox/4.0.1
Firefox4.0.1–Windows
User-Agent:Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1
Opera11.11–MAC
User-Agent:Opera/9.80(Macintosh;IntelMacOSX10.6.8;U;en)Presto/2.8.131Version/11.11
Opera11.11–Windows
User-Agent:Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11
Chrome17.0–MAC
User-Agent:Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11
傲游(Maxthon)
User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Maxthon2.0)
腾讯TT
User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;TencentTraveler4.0)
世界之窗(TheWorld)2.x
User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1)
世界之窗(TheWorld)3.x
User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;TheWorld)
搜狗浏览器1.x
User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;SE2.XMetaSr1.0;SE2.XMetaSr1.0;.NETCLR2.0.50727;SE2.XMetaSr1.0)
360浏览器
User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;360SE)
Avant
User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;AvantBrowser)
GreenBrowser
User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1)
移动设备端:
safariiOS4.33–iPhone
User-Agent:Mozilla/5.0(iPhone;U;CPUiPhoneOS4_3_3likeMacOSX;en-us)AppleWebKit/533.17.9(KHTML,likeGecko)Version/5.0.2Mobile/8J2Safari/6533.18.5
safariiOS4.33–iPodTouch
User-Agent:Mozilla/5.0(iPod;U;CPUiPhoneOS4_3_3likeMacOSX;en-us)AppleWebKit/533.17.9(KHTML,likeGecko)Version/5.0.2Mobile/8J2Safari/6533.18.5
safariiOS4.33–iPad
User-Agent:Mozilla/5.0(iPad;U;CPUOS4_3_3likeMacOSX;en-us)AppleWebKit/533.17.9(KHTML,likeGecko)Version/5.0.2Mobile/8J2Safari/6533.18.5
AndroidN1
User-Agent:Mozilla/5.0(Linux;U;Android2.3.7;en-us;NexusOneBuild/FRF91)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1
AndroidQQ浏览器Forandroid
User-Agent:MQQBrowser/26Mozilla/5.0(Linux;U;Android2.3.7;zh-cn;MB200Build/GRJ22;CyanogenMod-7)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1
AndroidOperaMobile
User-Agent:Opera/9.80(Android2.3.4;Linux;OperaMobi/build-1107180945;U;en-GB)Presto/2.8.149Version/11.10
AndroidPadMotoXoom
User-Agent:Mozilla/5.0(Linux;U;Android3.0;en-us;XoomBuild/HRI39)AppleWebKit/534.13(KHTML,likeGecko)Version/4.0Safari/534.13
BlackBerry
User-Agent:Mozilla/5.0(BlackBerry;U;BlackBerry9800;en)AppleWebKit/534.1+(KHTML,likeGecko)Version/6.0.0.337MobileSafari/534.1+
WebOSHPTouchpad
User-Agent:Mozilla/5.0(hp-tablet;Linux;hpwOS/3.0.0;U;en-US)AppleWebKit/534.6(KHTML,likeGecko)wOSBrowser/233.70Safari/534.6TouchPad/1.0
NokiaN97
User-Agent:Mozilla/5.0(SymbianOS/9.4;Series60/5.0NokiaN97-1/20.0.019;Profile/MIDP-2.1Configuration/CLDC-1.1)AppleWebKit/525(KHTML,likeGecko)BrowserNG/7.1.18124
WindowsPhoneMango
User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsPhoneOS7.5;Trident/5.0;IEMobile/9.0;HTC;Titan)
UC无
User-Agent:UCWEB7.0.2.37/28/999
UC标准
User-Agent:NOKIA5700/UCWEB7.0.2.37/28/999
UCOpenwave
User-Agent:Openwave/UCWEB7.0.2.37/28/999
UCOpera
User-Agent:Mozilla/4.0(compatible;MSIE6.0;)Opera/UCWEB7.0.2.37/28/999
二、浏览器识别
1、IE浏览器(以IE9.0为例)
PC端:User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;
移动设备:User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsPhoneOS7.5;Trident/5.0;IEMobile/9.0;HTC;Titan)
由于遨游、世界之窗、360浏览器、腾讯浏览器以及搜狗浏览器、Avant、GreenBrowser均采用IE的内核,因此IE浏览器判断的标准是”MSIE“字段,MSIE字段后面的数字为版本号,但同时还需要判断不包含”Maxthon“、”Theworld“、”360SE“、”TencentTraveler“、”SE“、”Avant“等字段(GreenBrowser没有明显标识)。移动设备还需要判断IEMobile+版本号。
2、360浏览器
PC端:User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;InfoPath.2;.NET4.0C;.NET4.0E;.NETCLR2.0.50727;360SE)
移动设备:暂无
360浏览器的判断标准是”360SE”字段,没有版本表示。
3、搜狗浏览器
PC端:User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;SE2.XMetaSr1.0;SE2.XMetaSr1.0;.NETCLR2.0.50727;SE2.XMetaSr1.0)
移动设备:暂无
搜狗浏览器的判断标准是”SE“、”MetaSr“字段,版本号为SE后面的数字。
4、Chrome
PC端:Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11
移动设备:User-Agent:Mozilla/5.0(Linux;U;Android2.2.1;zh-cn;HTC_Wildfire_A3333Build/FRG83D)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1
PC端chrome浏览器的判断标准是chrome字段,chrome后面的数字为版本号;移动端的chrome浏览器判断”android“、”linux“、”mobilesafari“等字段,version后面的数字为版本号。
5、Safari
PC端:User-Agent:Mozilla/5.0(Macintosh;U;IntelMacOSX10_6_8;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50
移动设备:User-Agent:Mozilla/5.0(iPhone;U;CPUiPhoneOS4_3_3likeMacOSX;en-us)AppleWebKit/533.17.9(KHTML,likeGecko)Version/5.0.2Mobile/8J2Safari/6533.18.5
由于Chrome及Nokia’sSeries60browser也使用WebKit内核,因此Safari浏览器的判断必须是:包含safari字段,同时不包含chrome等信息,确定后”version/“后面的数字即为版本号。在以上条件下包含Mobile字段的即为移动设备上的Safari浏览器。
6、腾讯浏览器
PC端:User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;TencentTraveler4.0;.NETCLR2.0.50727)
移动设备:User-Agent:MQQBrowser/26Mozilla/5.0(Linux;U;Android2.3.7;zh-cn;MB200Build/GRJ22;CyanogenMod-7)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1
腾讯浏览器的判断标准是”TencentTraveler“或者”QQBrowser“,TencentTraveler或QQBrowser后面的数字为版本号。
7、Firefox
PC端:User-Agent:Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1
移动设备:User-Agent:Mozilla/5.0(Android;Linuxarmv7l;rv:5.0)Gecko/Firefox/5.0fennec/5.0
Firefox的判断标准是Firefox字段,firefox后面的数字为版本号。
8、Theworld
PC端:User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;TheWorld)
移动设备:暂无
Theworld浏览器的判断标准是”Theworld“字段,没有标示版本号。
需要注意的是:Theworld2.x版本的User-Agent中没有”Theworld“的字段。
9、遨游
PC端:User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Maxthon2.0)
移动设备:暂无
遨游浏览器的判断标准是”Maxthon“,Maxthon后面的数字为版本号。
10、Opera
PC端:User-Agent:Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11
移动设备:User-Agent:Opera/9.80(Android2.3.4;Linux;Operamobi/adr-1107051709;U;zh-cn)Presto/2.8.149Version/11.10
opera浏览器的判断标准是opera字段,opera字段后面的数字为版本号。
11、UC浏览器
UCWeb有多种模式浏览方式,对应的User-Agent为:
UC无
User-Agent:UCWEB7.0.2.37/28/999
UC标准
User-Agent:NOKIA5700/UCWEB7.0.2.37/28/999
UCOpenwave
User-Agent:Openwave/UCWEB7.0.2.37/28/999
UCOpera
User-Agent:Mozilla/4.0(compatible;MSIE6.0;)Opera/UCWEB7.0.2.37/28/999
UC浏览器的判断标准是”UCWEB“字段,UCWEB后面的数字为版本号。
操作系统定向
操作系统定向依赖于各个浏览器在打开页面时所传输的httpheader信息中的User-Agent,关于User-Agent的说明,请参见Httpheader之User-Agent。
User-Agent的详细信息,请参见浏览器User-Agent的详细信息。
我们来了解User-Agent中的不同操作系统的识别方法。
PC端:
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 6.1 对应windows7
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
移动设备端:
iOS iPhone OS 4_3_3 iPhone/iPod
OS 4_3_3 iPad
Android Android 2.3.7 后面数字为版本号
WebOs hpwOS/3.0.0
SymbianOS SymbianOS/9.4
Windows Phone OS Windows Phone OS 7.5
BlackBerry BlackBerry