user agent字符串

本文介绍在浏览器检测中使用到的navigator.userAgent字符串的历史和格式。


userAgent字符串的历史

在万物之始,有一个浏览器叫做NCSA Mosaic,它在userAgent中称自己为NCSA_Mosaic/2.0 (Windows 3.1),它除了能显示文字外还能查看图片,以及其他很多有趣的新特性。

不久后一个新的浏览器Mozilla来了,它作为Mosaic Killer的缩写使得Mosaic很不高兴,所以将自己的名字改成了Netscape,奇怪的是Netscape在userAgent里称自己为Mozilla/1.0 (Win3.1)。Netscape支持frame,这时frame已经流行起来,但是Mosaic不支持frame,所以程序猿们开始了浏览器嗅探(user agent sniffing),只对Moilla发送frame,而其他浏览器则被忽略了。

这时候微软推出了自己的浏览器,称之为Internet Explorer。IE支持frame但是IE不是Mozilla,所以它并没有接收到frame。这时候微软等不及了,它声称自己是Mozilla compatible并且开始模仿Netscape将userAgent更改为Mozilla/1.22 (compatible; MSIE 2.0; Windows 95),结果是IE接收到了frame,微软高兴了,程序猿们却傻了。

微软通过windows系统出售IE浏览器,并且IE浏览器做的比Netscape更好,所以在第一次浏览器大战中,Netscape被干掉了。但是Netscape却在Mozilla获得重生,Mozilla构建了Gecko布局渲染引擎(render engine),这时它称自己Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826。这是Mozila变成了Firefox,称自己为Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1,而Firefox非常优秀。Gecko做的非常不错,其他许多浏览器的构建使用了它的代码,它们都称自己为Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1或Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.8) Gecko/20071008 SeaMonkey/1.0等等,“假装“成Mozilla。

现在Gecko非常棒,而IE则差强人意,这导致了浏览器嗅探再次产生。Gecko给与了更好的代码,其他浏览器则受到了冷遇。Linux的爱好者非常难过,因为它们创建的浏览器Konqueror使用的引擎KHTML和Gecko同样优秀,却没有给与同样好的代码,因此不能展现同样精彩的网页。这时Konquerer也更改了自己的userAgent,假装成Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)。

Opera突然跳出来说,我们当然要给用户选择的权利。所以它有一个菜单更改浏览器userAgent,根据选择不同,userAgent可能是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) 。

苹果也创建了自己的浏览器Safari,它使用了KHTML但是增加了许多新特性,它将KHTML项目移植过来,称之为WebKit,但希望拥有为KHTML编写的页面,所有它称自己Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5。

微软此时害怕了Firefox,所以IE开始称自己Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) 并获得了良好的网页代码。

这时,Google创建了Chrome,Chrome使用WebKit,因此它和Safari很像,希望为Safari编写的网页,所以它称自己为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。

结果就是Chrome使用WebKit,假装成Safari,WebKit假装成KHTML,KHTML假装成Gecko,所以所有浏览器都假装成了Mozilla,userAgent简直就是乱七八糟,几乎毫无用处。同时也证明了浏览器嗅探技术存在缺陷。

格式

User-Agent字符串格式在RFC 2616 (HTTP/1.1中定义,是由一系列的product tokens和comments组成的。

在第一次浏览器大战中,web服务器被配置成只向拥有高级特性的浏览器发送网页,如Mozilla,而向其他浏览器只发送大致的HTML文档。

因此,当今很多浏览器一般有着这样的格式:Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]。

参考Safari在ipad上的浏览器发出的userAgent:

 Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405

对该字符串的解释:

  • Mozilla/5.0: Previously used to indicate compatibility with the Mozilla rendering engine
  • (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us): Details of the system in which the browser is running
  • AppleWebKit/531.21.10: The platform the browser uses
  • (KHTML, like Gecko): Browser platform details
  • Mobile/7B405: This is used by the browser to indicate specific enhancements that are available directly in the browser or through third parties. An example of this is Microsoft Live Meeting which registers an extension so that the Live Meeting service knows if the software is already installed, which means it can provide a streamlined experience to joining meetings.

参考

History of the browser user-agent string  http://webaim.org/blog/user-agent-string-history/

wikipedia user agent http://en.wikipedia.org/wiki/User_agent

RFC2616 user agent http://tools.ietf.org/html/rfc2616#section-14.43

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值