天天看點

為什麼每個浏覽器的 User-Agent 都有 Mozilla 字樣?—— User-Agent混亂發展史

在解釋 “為什麼每個浏覽器的 User-Agent 都有 Mozilla 字樣?” 之前先貼一段目前常見的浏覽器 User-Agent 。

Chrome|谷歌浏覽器

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36

Firefox|火狐浏覽器

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0

Opera|歐朋浏覽器

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.32

Safari|蘋果浏覽器

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2

微軟 Edge 浏覽器

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586

Internet Explorer 11 浏覽器

Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

IE11 ↓

為什麼每個浏覽器的 User-Agent 都有 Mozilla 字樣?—— User-Agent混亂發展史

IE11相容模式 ↓

為什麼每個浏覽器的 User-Agent 都有 Mozilla 字樣?—— User-Agent混亂發展史

谷歌 ↓ 

為什麼每個浏覽器的 User-Agent 都有 Mozilla 字樣?—— User-Agent混亂發展史

火狐↓ 

為什麼每個浏覽器的 User-Agent 都有 Mozilla 字樣?—— User-Agent混亂發展史

 Edge ↓

為什麼每個浏覽器的 User-Agent 都有 Mozilla 字樣?—— User-Agent混亂發展史

從以上的浏覽器 User-Agent 确實可以看去都帶有 Mozilla ,那麼為會這樣呢?請往下看。

故事還得從頭說起,最初的主角叫 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 ,是以它總是收不到含有架構的頁面。微軟很郁悶很快就沉不住氣了,它不想等到所有的網站管理者都了解 Internet Explorer 并且給 Internet Explorer 發送含有架構的頁面,它選擇宣布IE是相容 Mozilla ,并且模仿 Netscape 稱 Internet Explorer 為 “Mozilla/1.22(compatible; MSIE 2.0; Windows 95)” ,于是 Internet Explorer 可以收到含有架構的頁面了,所有微軟的人都嗨皮了,但是網站管理者開始暈了。

因為微軟将 Internet Explorer 和 Windows 捆綁銷售,并且把 Internet Explorer 做得比 Netscape 更好,于是第一次浏覽器血腥大戰爆發了,結果是 Netscape 以失敗退出曆史舞台,微軟更加嗨皮。但沒想到 Netscape 居然又以 Mozilla 的名義重生了(為什麼要用“又”,因為在成立 Netscape 之前就是 Mozilla ,意為 Mosaic 殺手,當時的創立網絡浏覽模式的 Mosaic 對此非常不高興,于是後來 Mozilla 更名為 Netscape,現在又繞回來了。 ),并且開發了 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 很出色,而 Internet Explorer 完全跟不上它,是以 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”,增加了 AppleWebKit/… 字段,這進一步加劇了 User-Agent 的混亂局面。

因為微軟十分忌憚 Firefox ,于是 Internet Explorer 重裝上陣,這次它自稱為 “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 一個已經不存在的浏覽器……

各大浏覽器誕生年表
浏覽器 釋出時間 所屬公司
Mosaic 1993年1月23日 NCSA
Netscape 1994年12月 Mozilla
Opera 1995年4月 Opera Software ASA
Internet Explorer 1995年8月16日 Microsoft
Kongqueror 1996年10月14日 Kongqueror
Safari 2003年1月7日 Apple
Firefox 2004年11月8日 Mozilla
Chrome 2008年9月2日