本文概述了浏览器发展史上的重要事件,从NCSA Mosaic作为首个图形浏览器开始,到Mozilla、Netscape、IE等浏览器的竞争与演变。Netscape被IE击败后,重启为Mozilla并开发了Gecko内核,Firefox随之诞生。随后,Gecko内核的优异表现引发浏览器“伪装”成Mozilla的风潮,以获得更好网页内容。Apple的Safari、Google的Chrome等也加入此行列,导致user-agent标识混乱,最终失去原有作用。
各大浏览器与Mozilla有着怎样的渊源?且听本文作者为大家娓娓道来。
NCSA Mosaic
一切的一切,都得从NCSA Mosaic(简称Mosaic)说起。Mosaic是互联网历史上第一个获得普遍使用和能够显示图片的网页浏览器,1993年由伊利诺伊大学厄巴纳香槟分校的NCSA组织所发表。Mosaic的user-agent为NCSA Mosaic/2.0(Windows 3.1)。
Mozilla
Mosaic诞生后不久,出现了一种新的网络浏览器,称为“Mozilla”,是“Mosaic Killer”的简称。
Netscape
这时,Mosaic开始感到不爽了,于是将自己的新浏览器名称改为Netscape,并且Netscape自称为Mozilla/1.0(Windows 3.1)。此外,Netscape支持frames,而Mosaic并不支持这个逐渐被大众所欢迎的frames。于是“用户代理人嗅探”(user agent sniffing)技术出现,简而言之就是:网页服务器接收到请求,如果监测到用户代理为“Mozilla”则返回带有frames的网页,否则返回不带frames的网页。
IE
Netscape使用诸如“将Windows称为几乎不曾做过调试的设备管理器”等行为挑衅Microsoft,这使得后者非常恼火。愤怒的Microsoft也推出了称为Internet Explorer(简称IE)的网页浏览器,希望他能称为“Netscape Killer”。虽然IE也支持frames,但对于网页服务器而言,它并不算Mozilla,所以网页服务器并不会将带有frames的网页发给IE浏览器。为了得到带有frames的网页,IE宣称自己“兼容Mozilla”,而做法非常滑稽:把自己的user-agent标称为Mozilla/1.22(compatible;MSIE 2.0;Windows 95)。这样一来,IE浏览器终于能拿到带有frames的网页了,然而网页服务器却被搞的越来越糊涂。
为了抢占市场,微软将IE浏览器和Windows操作系统捆绑销售,并将IE浏览器弄的比Netscape更好用。在这第一次浏览器大战中,Netscape被IE打的没有脾气。
Gecko
Netscape被IE干掉之后,一直寻求卷土重来的机会,于是套上了“Mozilla”的马甲重新出发,并构建了Gecko内核,user-agent标称为Mozilla/5.0(Windows;U;Windows NT 5.0;en-US;rv:1.1)Gecko/20020826。Gecko属于渲染引擎,表现非常优异。
Firefox
被Netscape套用马甲的“原Mozilla”无奈之下,开发了Firefox浏览器,user-agent标称为Mozilla/5.0(Windows;U;Windows NT 5.1;sv-SE;rv:1.7.5) Gecko/20041108 Firefox/1.0。Firefox同样表现优异。
表现优异的Gecko渲染内核迅速扩张,一些浏览器使用了它的代码并将user-agent标称为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渲染内核。
随着Gecko内核变得越来越强大,而不思进取的IE止步不前,网页浏览器开始重定义自己的用户代理人嗅探策略:将更好的网页代码发送给基于Gecko内核的浏览器。也就是说包括IE浏览器在内的非Gecko内核浏览器被歧视了。
Konqueror
同是天涯沦落人的除了IE浏览器以外,还有同样备受歧视的Linux追随者们,因为他们创建的基于KHTML引擎支持的Konqueror同样被区别对待了。Linux追随者们认为KHTML和Gecko一样优秀,于是也开始将Konqueror伪装成基于Gecko内核开发的浏览器,以得到更好的网页代码。
Opera
在这场轰轰烈烈的“伪装大赛”中,最突出的可以数Opera浏览器了,因为它居然允许用户自己来决定将Opera伪装成谁。Opera浏览器菜单中提供了诸如Mozilla /4.0、Mozilla/5.0、Opera/9.51等多种伪装选项,用户选哪个Opera就伪装为哪个。
Safari
Apple在KHTML渲染内核的基础上增加了不少新特性并称之为Webkit渲染引擎,并在此内核的基础上开发了Safari浏览器,为了也能得到更良好的网页代码,Safari将自己的user-agent标称为Mozilla/5.0(Macintosh;U;PPC Mac OS X;de-de)AppleWebKit/85.7(KHTML,like Gecko)Safari/85.5。这本来就非常混乱的局面被搞得更加混乱了。
与此同时,微软也开始忌惮发展的越来越好的Firefox了,重启了IE浏览器的开发并将自己的user-agent改为Mozilla/4.0(compatible;MSIE 8.0;Windows NT 6.0)。
Chrome
Google开发的大名顶顶的Chrome浏览器同样逃不过“真香定律”,因为Chrome浏览器使用了Webkit渲染引擎,所以希望得到为Safari提供的网页代码的Chrome决定将自己伪装成Safari。我们来捋一捋这个关系,Chrome浏览器使用了Webkit渲染引擎,伪装成Safari,而Webkit又伪装成KHTML,KHTML伪装成Gecko,同时所有浏览器都宣称自己为Mozilla,于是Chrome浏览器的user-agent被标为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。
至此,user-agent已经被玩坏了,几乎发挥不了任何作用,因为每个浏览器都声称自己为Mozilla。
注:部分内容参考《Browser Wars - A Mozilla Story》
本文转载自:[微信公众号]TC星球
作者:劳丹峰
原文链接:https://mp.weixin.qq.com/s/R5qIQSY6g8dRDFRaeapmng