为何浏览器User-agent老是有Mozilla字样

你是否好奇标识浏览器身份的User-Agent,为何每一个浏览器都有Mozilla字样?
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
Mozilla/5.0 (Linux; U; Android 4.1.2; zh-tw; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)

故事还得从头提及,最初的主角叫NCSA Mosaic,简称Mosaic(马赛克),是1992年底位于伊利诺伊大学厄巴纳-香槟分校的国家超级计算机应用中心(National Center for Supercomputing Applications,简称NCSA)开发,并于1993年发布的一款浏览器。它自称“NCSA_Mosaic/2.0(Windows 3.1)”,Mosaic能够同时展现文字和图片,今后浏览器变得有趣多了。浏览器


然而很快就出现了另外一个浏览器,这就是著名的Mozilla,中文名称摩斯拉。一说 Mozilla = Mosaic + Killer,意为Mosaic杀手,也有说法是 Mozilla = Mosaic & Godzilla,意为马赛克和哥斯拉,而Mozilla最初的吉祥物是只绿色大蜥蜴,后来更改成红色暴龙,跟哥斯拉长得同样。
但Mosaic对此很是不高兴,因而后来Mozilla改名为Netscape,也就是网景。Netscape自称“Mozilla/1.0(Win3.1)”,事情开始变得更加有趣。网景支持框架(frame),因为你们的喜欢框架变得流行起来,可是Mosaic不支持框架,因而网站管理员探测user agent,对Mozilla浏览器发送含有框架的页面,对非Mozilla浏览器发送没有框架的页面。
后来网景拿微软寻开心,称微软的Windows是“没有调试过的硬件驱动程序”。微软很生气,后果很严重。此后微软开发了本身的浏览器,这就是Internet Explorer,并但愿它能够成为Netscape Killer。IE一样支持框架,但它不是Mozilla,因此它老是收不到含有框架的页面。微软很郁闷很快就沉不住气了,它不想等到全部的网站管理员都了解IE而且给IE发送含有框架的页面,它选择宣布IE是兼容Mozilla,而且模仿Netscape称IE为“Mozilla/1.22(compatible; MSIE 2.0; Windows 95)”,因而IE能够收到含有框架的页面了,全部微软的人都嗨皮了,可是网站管理员开始晕了。框架


由于微软将IE和Windows捆绑销售,而且把IE作得比Netscape更好,因而第一次浏览器血腥大战爆发了,结果是Netscape以失败退出历史舞台,微软更加嗨皮。但没想到Netscape竟然以Mozilla的名义重生了,而且开发了Gecko,此次它自称为“Mozilla/5.0(Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826”。
Gecko是一款渲染引擎而且很出色。Mozilla后来变成了Firefox,并自称“Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0”。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。
Gecko很出色,而IE彻底跟不上它,所以user agent探测规则变了,使用Gecko的浏览器被发送了更好的代码,而其余浏览器则没有这种待遇。Linux的追随者对此很难过,由于他们编写了Konqueror,它的引擎是KHTML,他们认为KHTML和Gecko同样出色,但却由于不是Gecko而得不到好的页面,因而Konqueror为获得更好的页面开始将本身假装成“like Gecko”,并自称为“Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)”。自此user agent变得更加混乱。
这时更有Opera跳出来讲“毫无疑问,咱们应该让用户来决定他们想让咱们假装成哪一个浏览器。”因而Opera干脆建立了菜单项让用户自主选择让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)”。ide


后来苹果开发了Safari浏览器,并使用KHTML做为渲染引擎,但苹果加入了许多新的特性,因而苹果从KHTML另辟分支称之为WebKit,但它又不想抛弃那些为KHTML编写的页面,因而Safari自称为“Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5”,这进一步加重了user agent的混乱局面。
由于微软十分忌惮Firefox,因而IE重装上阵,此次它自称为“Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ”,而且渲染效果一样出色,可是须要网站管理员的指令它这么作才行。
再后来,谷歌开发了Chrome浏览器,Chrome使用Webkit做为渲染引擎,和Safari以前同样,它想要那些为Safari编写的页面,因而它假装成了Safari。因而Chrome使用WebKit,并将本身假装成Safari,WebKit假装成KHTML,KHTML假装成Gecko,最后全部的浏览器都假装成了Mozilla,这就是为何全部的浏览器User-Agent里都有Mozilla。Chrome自称为“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字符串变得一团糟,几乎根本没法彰显它最初的意义。追根溯源,微软能够说是这一切的始做俑者,但后来每个人都在试图假扮别人,最终把User-Agent搞得混乱不堪。性能


一句话结论:由于网站开发者可能会由于你是某浏览器(这里是 Mozilla),因此输出一些特殊功能的程序代码(这里指好的特殊功能),因此当其它浏览器也支持这种好功能时,就试图去模仿 Mozilla 浏览器让网站输出跟 Mozilla 同样的内容,而不是输出被阉割功能的程序代码。你们都为了让网站输出最好的内容,都试图伪装本身是 Mozilla 一个已经不存在的浏览器……
附各大浏览器诞生年表:网站


1993年1月23日:Mosaic
1994年12月:Netscape
1994年:Opera
1995年8月16日:Internet Explorer
1996年10月14日:Kongqueror
2003年1月7日:Safari
2008年9月2日:Chrome
注:本文转自简明现代魔法。ui