從百度知道看的一段非常有趣的瀏覽器歷史,解釋為什么User-agent總是有Mozilla字樣。
你是否好奇標(biāo)識(shí)瀏覽器身份的User-Agent,為什么每個(gè)瀏覽器都有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)
故事還得從頭說(shuō)起,最初的主角叫NCSA Mosaic,簡(jiǎn)稱Mosaic(馬賽克),是1992年末位于伊利諾伊大學(xué)厄巴納-香檳分校的國(guó)家超級(jí)計(jì)算機(jī)應(yīng)用中心(National Center for Supercomputing Applications,簡(jiǎn)稱NCSA)開(kāi)發(fā),并于1993年發(fā)布的一款瀏覽器。它自稱“NCSA_Mosaic/2.0(Windows 3.1)”,Mosaic可以同時(shí)展示文字和圖片,從此瀏覽器變得有趣多了。
然而很快就出現(xiàn)了另一個(gè)瀏覽器,這就是著名的Mozilla,中文名稱摩斯拉。一說(shuō) Mozilla = Mosaic + Killer,意為Mosaic殺手,也有說(shuō)法是 Mozilla = Mosaic & Godzilla,意為馬賽克和哥斯拉,而Mozilla最初的吉祥物是只綠色大蜥蜴,后來(lái)更改為紅色暴龍,跟哥斯拉長(zhǎng)得一樣。
但Mosaic對(duì)此非常不高興,于是后來(lái)Mozilla更名為Netscape,也就是網(wǎng)景。Netscape自稱“Mozilla/1.0(Win3.1)”,事情開(kāi)始變得更加有趣。網(wǎng)景支持框架(frame),由于大家的喜歡框架變得流行起來(lái),但是Mosaic不支持框架,于是網(wǎng)站管理員探測(cè)user agent,對(duì)Mozilla瀏覽器發(fā)送含有框架的頁(yè)面,對(duì)非Mozilla瀏覽器發(fā)送沒(méi)有框架的頁(yè)面。
后來(lái)網(wǎng)景拿微軟尋開(kāi)心,稱微軟的Windows是“沒(méi)有調(diào)試過(guò)的硬件驅(qū)動(dòng)程序”。微軟很生氣,后果很嚴(yán)重。此后微軟開(kāi)發(fā)了自己的瀏覽器,這就是Internet Explorer,并希望它可以成為Netscape Killer。IE同樣支持框架,但它不是Mozilla,所以它總是收不到含有框架的頁(yè)面。微軟很郁悶很快就沉不住氣了,它不想等到所有的網(wǎng)站管理員都了解IE并且給IE發(fā)送含有框架的頁(yè)面,它選擇宣布IE是兼容Mozilla,并且模仿Netscape稱IE為“Mozilla/1.22(compatible; MSIE 2.0; Windows 95)”,于是IE可以收到含有框架的頁(yè)面了,所有微軟的人都嗨皮了,但是網(wǎng)站管理員開(kāi)始暈了。
因?yàn)槲④泴E和Windows捆綁銷售,并且把IE做得比Netscape更好,于是第一次瀏覽器血腥大戰(zhàn)爆發(fā)了,結(jié)果是Netscape以失敗退出歷史舞臺(tái),微軟更加嗨皮。但沒(méi)想到Netscape居然以Mozilla的名義重生了,并且開(kāi)發(fā)了Gecko,這次它自稱為“Mozilla/5.0(Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826”。
Gecko是一款渲染引擎并且很出色。Mozilla后來(lái)變成了Firefox,并自稱“Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0”。Firefox性能很出色,Gecko也開(kāi)始攻城略地,其他新的瀏覽器使用了它的代碼,并且將它們自己稱為“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”,每一個(gè)都將自己裝作Mozilla,而它們?nèi)际褂肎ecko。
Gecko很出色,而IE完全跟不上它,因此user agent探測(cè)規(guī)則變了,使用Gecko的瀏覽器被發(fā)送了更好的代碼,而其他瀏覽器則沒(méi)有這種待遇。Linux的追隨者對(duì)此很難過(guò),因?yàn)樗麄兙帉?xiě)了Konqueror,它的引擎是KHTML,他們認(rèn)為KHTML和Gecko一樣出色,但卻因?yàn)椴皇荊ecko而得不到好的頁(yè)面,于是Konqueror為得到更好的頁(yè)面開(kāi)始將自己偽裝成“l(fā)ike Gecko”,并自稱為“Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)”。自此user agent變得更加混亂。
這時(shí)更有Opera跳出來(lái)說(shuō)“毫無(wú)疑問(wèn),我們應(yīng)該讓用戶來(lái)決定他們想讓我們偽裝成哪個(gè)瀏覽器?!庇谑荗pera干脆創(chuàng)建了菜單項(xiàng)讓用戶自主選擇讓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)”。
后來(lái)蘋(píng)果開(kāi)發(fā)了Safari瀏覽器,并使用KHTML作為渲染引擎,但蘋(píng)果加入了許多新的特性,于是蘋(píng)果從KHTML另辟分支稱之為WebKit,但它又不想拋棄那些為KHTML編寫(xiě)的頁(yè)面,于是Safari自稱為“Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5”,這進(jìn)一步加劇了user agent的混亂局面。
因?yàn)槲④浭旨蓱凢irefox,于是IE重裝上陣,這次它自稱為“Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ”,并且渲染效果同樣出色,但是需要網(wǎng)站管理員的指令它這么做才行。
再后來(lái),谷歌開(kāi)發(fā)了Chrome瀏覽器,Chrome使用Webkit作為渲染引擎,和Safari之前一樣,它想要那些為Safari編寫(xiě)的頁(yè)面,于是它偽裝成了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”。
因?yàn)橐陨线@段歷史,現(xiàn)在的User-Agent字符串變得一團(tuán)糟,幾乎根本無(wú)法彰顯它最初的意義。追根溯源,微軟可以說(shuō)是這一切的始作俑者,但后來(lái)每一個(gè)人都在試圖假扮別人,最終把User-Agent搞得混亂不堪。
一句話結(jié)論:因?yàn)榫W(wǎng)站開(kāi)發(fā)者可能會(huì)因?yàn)槟闶悄碁g覽器(這里是 Mozilla),所以輸出一些特殊功能的程序代碼(這里指好的特殊功能),所以當(dāng)其它瀏覽器也支持這種好功能時(shí),就試圖去模仿 Mozilla 瀏覽器讓網(wǎng)站輸出跟 Mozilla 一樣的內(nèi)容,而不是輸出被閹割功能的程序代碼。大家都為了讓網(wǎng)站輸出最好的內(nèi)容,都試圖假裝自己是 Mozilla 一個(gè)已經(jīng)不存在的瀏覽器……
附各大瀏覽器誕生年表:
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
注:本文轉(zhuǎn)自簡(jiǎn)明現(xiàn)代魔法。