標籤:

為什麼所有主要瀏覽器的 User-Agent 都是 Mozilla/x.0 開頭?


最早的時候,Netscape 把他們瀏覽器中的 User-Agent 定成了 Mozilla/4.04 (Macintosh; I; PPC) 的形式。由於裡面包含了引擎名和版本信息,那個時候很多做網站的程序員就利用 User-Agent 來判斷瀏覽器特性(比如是否支持 frame 等),對於他們認為不符合要求的瀏覽器顯示不兼容內容(就像現在程序員歧視 IE 6 那樣)。

由於那個時候 Netscape 是霸主,這也導致微軟推出 IE 的時候必須把自己偽裝成 Netscape 瀏覽器,於是他們的 User-Agent 也是以 Mozilla/4.0 開頭的。(當然微軟成為霸主之後就用一句「for historical reasons」淡定地帶過此歷史。)後來這也就成為了事實標準,所有主要瀏覽器都以 Mozilla/x.0 開頭了。

參考:

  1. user-agent strings: http://www-archive.mozilla.org/build/user-agent-strings.html
  2. Understanding User-Agent Strings: http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx

作者: iFantasticMe
鏈接:瀏覽器 user-agent 字元串的故事
來源:博客園 - 開發者的網上家園
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

你是否好奇標識瀏覽器身份的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)」。

後來蘋果開發了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


這裡有篇很有趣的文章詳細講了這個歷史:http://webaim.org/blog/user-agent-string-history/


Mozilla/x.0 的意思是,兼容Mozilla渲染引擎。Mozilla最初是Netscape Navigator項目的內部codename。大部分瀏覽器仍然在User-agent中使用Mozilla,證明了Netscape曾經的市場主導地位,所有主要瀏覽器必須跟它「兼容」。


1.看到各種瀏覽器的User-Agent,如果你覺得亂,覺得一團糟,那就對了(可以看看2樓分享的歷史);

2.從某種程度上看,User-Agent是一種瀏覽器的偽裝手段。至於為甚麼要偽裝,很多可想。這也令我想起了一個話題-「科技想要什麼?」。當人人偽裝之時,已無謂假真。


參看所有瀏覽器的userAgent為何都帶Mozilla


瀏覽器的Ueragent 也是醉了


推薦閱讀:

為什麼知乎等網站不支持 IE6 ?
為何在使用 Chrome 同步功能時,有的擴展能夠同步,有的卻不能同步呢?
你的瀏覽器首頁是什麼?為什麼?
Chrome 的地址欄長度可以調整么?
開發一款瀏覽器難點有哪些?

TAG:網頁瀏覽器 |