在解釋 “為什麼每個浏覽器的 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 ↓
IE11相容模式 ↓
谷歌 ↓
火狐↓
Edge ↓
從以上的浏覽器 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日 |