瀏覽器User-agent String里的歷史故事

為啥User-agent總是有Mozilla字樣?
服務器君一共花費了119.390 ms進行了4次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

你是否好奇標識瀏覽器身份的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://www.zqhthc.tw/librarys/veda/detail/2576,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.zqhthc.tw/librarys/veda/detail/2576

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

大家都在看

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《UNIX環境高級編程(第2版)》 史蒂文斯 (作者), 拉戈 (作者), 尤晉元 (譯者), 張亞英 (譯者), 戚正偉 (譯者)

《UNIX環境高級編程(第2版)》是被譽為UNIX編程“圣經”的Advanced Programming in the UNIX Environment一書的更新版。在本書第1版出版后的十幾年中,UNIX行業已經有了巨大的變化,特別是影響UNIX編程接口的有關標準變化很大。本書在保持了前一版的風格的基礎上,根據最新的標準對內容進行了修訂和增補,反映了最新的技術發展。書中除了介紹UNIX文件和目錄、標準I/O庫、系統數據文件和信息、進程環境、進程控制、進程關系、信號、線程、線程控制、守護進程、各種I/O、進程間通信、網絡IPC、偽終端等方面的內容,還在此基礎上介紹了多個應用示例,包括如何創建數據庫函數庫以及如何與網絡打印機通信等。

更多計算機寶庫...

英超直播吻球网