一篇文章带你了解清楚什么是UA
最近在做一部分的UA的统计、正好做下记录、有需要的同学也可以借鉴一下
一、首先讲一下UA是什么
UA,全称为“User Agent”,中文通常直译为“用户代理”,但从其产生作用的机制来看,或许称之为“浏览器标识”或“浏览器名片”更为妥帖。
实际上,UA是一个浏览器被用来访问网站时发送给网站服务器的一串特定字符,其内容通常包含了“操作系统及版本”、“CPU 类型”、“浏览器及版本”、“浏览器渲染引擎”、“浏览器语言”、“浏览器插件”等信息。网站服务器可以根据这串字符大体判断出用户所使用的软硬件环境,进而采取不同的内容策略。这些内容策略在互联网早期时代通常是为了解决兼容性问题
以iPad上的Safari为例,其使用的UA就是以下字符串(根据Safari版本的不同,UA字符串可能会有所变化
Mozilla/5.0(iPad;U;CPU OS 3_2_1 like Mac OS X; en-us)AppleWebWebKit/531.21.10(KHTML, like Gecko) Mobile/7B405
这一组字符串的组成及其说明如下:
二、UA的历史进程
1、浏览器的诞生
因特网诞生后,英国计算机科学家Berners-Lee率先指出将超文本嫁接到因特网的可行性。1990年,Berners-Lee在一台NeXT工作站上写出了第一个网页实现他的想法。就这样,万维网(WorldWideWeb)诞生了,Berners-Lee也因此被称为Web之父。
同年,Berners-Lee还制作了万维网所需的两个最基础的工具——第一个网页服务器和第一个网络浏览器。Berners-Lee将浏览器命名为“Nexus”。从这个意义上讲,Berners-Lee也是浏览器之父。然而,Nexus浏览器只能显示文字,无法显示图片,这就为此后其他浏览器的出现留下了市场空间,也为UA的出现埋下了种子。
2、UA的诞生
由于Nexus浏览器的不足之处,实现浏览图片的功能就成了用户的迫切需求。1993年1月23日,National Center for Supercomputing Applications,简称NCSA组织,发布了互联网历史上第一个图形化的浏览器——Mosaic(马赛克)。Mosaic浏览器可以同时展示文字和图片,使浏览器变得有趣而流行起来。
为了发挥Mosaic浏览器的优势,让网页服务器可以向Mosaic浏览器推送有图片的内容,有必要让网页服务器将Nexus浏览器和Mosaic浏览器区别开来。NCSA组织的做法是,在访问网页服务器时,首先向服务器发送特定的字符串:“Mosaic/2.0(Windows 3.1)”以此作为自己浏览器的标识。从此UA诞生了。
此时的UA确实一身清白,仅仅表明了自己是什么浏览器和所在系统,以及两者的版本号。
3、Mozilla浏览器诞生
1994年,Mosaic浏览器的研发核心成员马克·安德森(Marc Andreessen)和几何图形发生器的发明人吉姆·克拉克(Jim.H.Clark)组建公司发布了另一款浏览器,命名为Mozilla,中文名称摩斯拉。从此,堪称伟大的Mozilla浏览器诞生了。
1994年12月Mozilla改名为Netscape,即网景浏览器,但Netscape仍然将自己标识为Mozilla:“Mozilla/1.0(Win3.1)”。由于当时网页开发中开始流行框架技术,Netscape支持框架技术,而其他浏览器要么不支持要么支持的不好, Netscape很快成为当时最流行和市场占有率最高的浏览器。同时,网站管理员在服务器的设置上开始使用探测技术和差异化页面,对Netscape浏览器发送含有框架的页面,对非Netscape浏览器发送没有框架的页面。
Mozilla在浏览器历史上的地位举足轻重。不但其诞生之后风靡程度一时无两,成为众多浏览器竞相学习的对象。而且在随后的历史中,虽然其几经波折,多次更名,屡屡面临生死考验,但Mozilla每每如凤凰般涅槃重生,其“后嗣”始终在市场上占有一席之地。甚至到了今天,Mozilla作为一款浏览器本身已从市场上消失,但众多浏览器仍然在UA中将自己标记为“Mozilla”。
可以说,Netscape以及后续的Firefox浏览器是Mozilla根正苗红的正统传人,在UA中将自己标记为Mozilla无可非议。但是很快,“六耳猕猴”出现了,其他浏览器也纷纷将自己标记为Mozilla。这一切的“始作俑者”,正是微软的IE浏览器。那一年,是1995年。
4、Internet Explorer的诞生
1995年8月16日,微软开发了自己的支持框架技术的浏览器Internet Explorer(简称IE),并希望能够取代Netscape浏览器。但微软很快就发现,尽管IE浏览器也同样支持框架,却往往并不能收到包含框架的页面。原因是网站的服务器会在收到浏览器的访问请求时先判断是什么浏览器在访问自己,如果UA中含有Mozilla,则认为是Mozilla(Netscape)在访问自己,就向浏览器推送有框架的页面;如果UA中不包含Mozilla,则认为是其他浏览器在访问自己,就向浏览器推送不含框架的页面。
为了用户使用IE时也能收到有框架的页面,微软开始声称自己是兼容Mozilla的,并且模仿Netscape的标识,使用Useragent将自己标记为“Mozilla/1.22(compatible; MSIE 2.0; Windows 95)”,于是IE也可以收到含有框架的页面了。从此,Useragent开始成为浏览器解决兼容性和改善用户体验通常采取的一种重要技术。之后IE版本几经更新,所使用的UA与第一代IE或多或少都会有所区别,但伪装成Mozilla的做法则一直没有改变,并被后世的浏览器纷纷效仿。
从这段历史我们可以观察到,在1990年-1995年这短短6年时间里,我们经历了浏览器的诞生、UA的出现、UA伪装被IE浏览器用于解决兼容性问题三个重要历史事件。而自1995年至今的20多年间,UA伪装被广泛应用,基本成为每一个浏览器的必备功能
浏览器行业及其UA经过20多年的发展,互相竞争,互相借鉴,逐渐形成了4支使用不同内核的市场力量。
5、逐渐演化出来的浏览器分支
Gecko
随着IE浏览器的流行,Netscape逐渐退出历史舞台,但其公司内的技术宅们却不甘失败,2003年7月15日以Mozilla基金会(Mozilla org)名义发布了Firefox浏览器,其浏览器内核,被命名为Gecko,仍然沿用Mozilla浏览器的UA “Mozilla/5.0(Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826”
由于Gecko的出色,和IE的止步不前,UA的探测规则一度又发生了变化——使用Gecko的浏览器被发送了更好的网页代码,其他浏览器没有这种待遇。于是众多浏览器纷纷将Gecko加入到自己的UA当中。
就Mozilla这一名号来说,Gecko(Firefox)根正苗红,堪称正统,可以称之为大唐圣僧。与此同时,由于吃唐生肉可以长生不老,其他浏览器恨不得都来咬上一口,至少蹭蹭热点,纷纷在自己的UA中加入Gecko,这也就是like Gecko这一字符的由来。
KHTML/WebKit
1996年10月14日,Linux开源社区开发出使用KHTML内核的Konqueror浏览器时,既将自己伪装成Mozilla,又声称兼容Gecko(like Gecko)。其浏览器UA为“Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)”
KHTML/WebKit是非常优秀的浏览器核心,众多软件厂商纷纷开发基于这一核心的浏览器新品。Konqueror、Safari、Chrome先发在前,QQ浏览器、搜狗高速浏览器、360浏览器紧随其后。它就如同孙悟空一样会七十二般变化,不断衍生出新的浏览器,拥有众多猴子猴孙,不亏为浏览器界的大师兄。
2003年1月7日,苹果使用源自KHTML渲染引擎的Webkit内核,开发了Safari浏览器。苹果为了兼容性考虑,将KHTML的UA中的Mozilla、Gecko、KHTML统统继承下来。于是苹果将Safari浏览器的UA标记为“Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5”。与IE浏览器不同的是,苹果在其部分浏览器默认UA中除了伪装成Mozilla之外,还在UA的末尾标记出自己独特的浏览器标识Safari,这为后续Safari流行之后网站针对Safari进行优化留下了空间(其ipad则并未做此标识),现在看来,不得不佩服苹果的自信与野心。目前众多网站特别是移动端的网站已纷纷针对Safari做专门适配。
2008年9月2日,谷歌使用Webkit作为渲染引擎,开发了Chrome浏览器。和Safari一样,它想要浏览那些为Safari编写的页面,于是继承了Safari的UA“Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13”,并将自己的浏览器名称添加进去,收到的效果,也与苹果的做法如出一辙。
Trident (IE)
随着IE浏览器成为主流,其地位似乎越来越不可撼动。微软开始不思进取,IE浏览器虽然因其市场地位而获得了兼容性的优势,但其功能却裹足不前,易用性越来越差,逐渐跟不上时代步伐。此时,诞生了众多以IE(Trident内核)为浏览器核心的功能增强型浏览器,如世界之窗浏览器、遨游浏览器(旧版)等,其UA也与IE存在继承关系,再此不一一赘述,感兴趣的朋友,可以查看本文最后所附清单。IE及其Trident内核,就如IE浏览器一样,虽然曾经风生水起,贵为天蓬元帅,但现在已经臃肿笨拙,不堪重用。
Opera
1994年Opera浏览器发布,它不像其他浏览器那样把自己标记成其Mozilla,而是使用自己特有的UA “Opera/9.51 (Windows NT 5.1; U; en)”。但这种坚持也是导致Opera长期以来最为人所诟病的兼容性差的重要原因。使用其他浏览器非常正常的网页内容,使用Opera常常不是排版错乱就是乱码,要么就是字体显示颜色过浅看不清(特别是中文字体)——因为多数网站主要以IE或者说是早期Mozilla的渲染标准编写。
最终为了市场,Opera不得不做出些许妥协,但仍然不是简单粗暴地把自己标记为Mozilla,而是主张让用户来决定伪装成哪个浏览器。于是Opera浏览器创建了菜单选项,让用户自主选择变成“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51”,或者“Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51”, 或者“Opera/9.51 (Windows NT 5.1; U; en)”。
由于Opera的这一做法非常人性化,取得了不错的效果,之后出现的浏览器或浏览器的新版本,无论是Mozilla一脉,或是IE及以IE为核心浏览器一族,还是Konqueror、Safari、Chrome这一队,都纷纷效仿,添加可以由用户修改UA的功能——要么与Opera一样提供预置好的数个UA供用户选择,要么提供UA修改功能使用户可以将UA修改为任意内容。
只不过,由于Opera特立独行,虽然其口碑很好,功能完备,市场占有率却一直没有起色
其他的衍生产品
自第一个网络浏览器发布至今,已有28年历史。浏览器的开发难度,也已由顶级技术大神的造物,变成了普通软件工程师的玩物。市场上,浏览器如雨后春笋般出现,呈现出百花齐放的局面。只是,目前的浏览器数量虽多,其所使用的浏览核心,却无非Gecko 、IE、KHTML(WebKit)、Opera四大族裔。故其所使用的浏览器UA,也几乎均与其前辈存在继承关系。就现状而言,虽然各个浏览器UA都会有所区别,却也可以总结出如下特点:
1、几乎所有的浏览器都提供了UA修改功能,供用户伪装成其他浏览器;
2、默认UA均以Mozilla开头(Opera除外)。
3、相较PC端的浏览器,移动端往往提供更为方便的修改UA功能
4、几乎都会提供分别“伪装”成iPhone、ipad、PC(IE)三种UA选项。
如果把UA的作用视为一种伪装的话,会得出一个非常有趣的结论:Chrome伪装成Safari;Safari伪装成KHTML;KHTML伪装成Gecko;Gecko、IE伪装成Mozilla,最终所有的浏览器(只有Opera除外)都伪装成Mozilla。而Mozilla以一个浏览器而言,已经从市场上消失,却还活在其他浏览器的UA之中。
微软可以说是这种伪装行为的“始作俑者”,但后来的每一个浏览器在模仿微软的做法。因为,网站的开发者往往会因为某一浏览器所具备的某些功能而输出一些与之对应的网页代码来实现特殊的功能,当其他浏览器也具备这些功能时,就试图去“伪装”成这一浏览器让网站向自己输出与之同样的网页代码,而不是被阉割了功能的网页代码。各个浏览器都是为了让用户在访问网站时能够获得最好的内容和浏览体验。
附录: 浏览器默认UA大全
# 1、移动端
# Android N1
Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
# Android Pad Moto Xoom
Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13
# BlackBerry
Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1 (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1
# QQ浏览器 For android
MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
# Opera浏览器
Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10
# safari iOS 4.33 – iPhone
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5
# 2、PC端浏览器
# 搜狗浏览器 1.x
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)
# Green Browser浏览器
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
# The World浏览器 2.x
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
# The World浏览器 3.x
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)
# Maxthon浏览器
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)
# TT浏览器
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)
# 360SE浏览器
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)
# safari 5.1 – Windows
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50
# IE 9.0
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
# IE 8.0
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)
# IE 7.0
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
# IE 6.0
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
# Firefox 4.0.1 – Windows
Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
# Opera 11.11 – Windows
Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11
# Chrome 17.0 – MAC
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11