你是否好奇標識瀏覽器身份的User-Agent,爲何每一個瀏覽器都有Mozilla字樣?html
故事還得從頭提及,最初的主角叫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)」。htm
後來蘋果開發了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的混亂局面。blog
由於微軟十分忌憚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」。ci
由於以上這段歷史,如今的User-Agent字符串變得一團糟,幾乎根本沒法彰顯它最初的意義。追根溯源,微軟能夠說是這一切的始做俑者,但後來每個人都在試圖假扮別人,最終把User-Agent搞得混亂不堪。
各大瀏覽器誕生年表:
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