為什么瀏覽器User-agent總是有Mozilla字樣

一直用window下的 navigator對象里的用戶代理讀取瀏覽器類型,但是沒想過為什么要這么長的一串描述,總覺得瀏覽器廠商這點做的不好,而且基本都含有Mozilla/5.0字樣,所以好好查證一番。

//判斷瀏覽器 ie6  MSIE 7.0

document.write(window.navigator.userAgent.indexOf("MSIE 7") != -1);
document.write('
'+window.navigator.userAgent);

    故事還得從頭說起,最初的主角叫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(Win[3.1]事情開始變得更加有趣。[網景]支持框架(frame),由于大家的喜歡框架變得流行起來,但是Mosaic不支持框架,于是[網站管理員]對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瀏覽器](https://www.baidu.com/s?變成“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

注:本文轉自簡明現代魔法。

----------------------------------------------------喜歡就動動小手哈。------------------------------------------------------

--------------------------------------你的支持是灑家-麥殼-macrolam前進的動力--------------------------------------

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容

  • 第1章 認識JS JavaScript能做什么?1.增強頁面動態效果(如:下拉菜單、圖片輪播、信息滾動等)2.實現...
    mo默22閱讀 1,313評論 0 5
  • 一、JS前言 (1)認識JS 也許你已經了解HTML標記(也稱為結構),知道了CSS樣式(也稱為表示),會使用HT...
    凜0_0閱讀 2,785評論 0 8
  • 事件源對象 event.srcElement.tagName event.srcElement.type 捕獲釋放...
    孤魂草閱讀 897評論 0 0
  • User Agent中文名為用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務器能夠識別客戶使用的操作系統及版本...
    劍老濕閱讀 2,313評論 0 9
  • 每個人內心都藏著一只小山鼠,渴望自由卻往往囿于舊有模式。
    鮒魚閱讀 204評論 0 0