為什麼每個瀏覽器都有Mozilla字樣(轉載於知乎shadow)

来源:http://www.cnblogs.com/wuhaozhou/archive/2017/05/25/6905188.html
-Advertisement-
Play Games

作者寫的很有意思拿出來和大家分享 作者:Shadow鏈接:https://www.zhihu.com/question/19553117/answer/114306637來源:知乎著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。 你是否好奇標識瀏覽器身份的User-Agent,為 ...


作者寫的很有意思拿出來和大家分享 作者:Shadow
鏈接:https://www.zhihu.com/question/19553117/answer/114306637
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

你是否好奇標識瀏覽器身份的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
註:本文轉自簡明現代魔法。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • flex在眾多手機瀏覽器上的相容方案(親測華為手機自帶瀏覽器) 如果項目使用構建工具,可加autoprefixer來處理,[autoprefixer使用指南] 純手寫css相容代碼,需給每個使用的屬性加上屬性首碼 /*display: flex;寫法*/ span { display: -webki ...
  • f 指令 語法比較簡單,直接上代碼: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title ...
  • MIME (Multipurpose Internet Mail Extensions) 是描述內容類型的互聯網標準。Clients use this content type or media type header to select an appropriate viewer applicat ...
  • ...
  • 描述:這段時間給公司做個後臺管理系統,功能差不錯實現了,回過頭來吧登錄頁完善下,剛好碰到了‘記住用戶名‘這個小東西。之前有看過不少代碼,都沒有太留意這部分,這次自己從頭至尾做,那就好好的處理下。 目的:用戶在登錄的時候勾選“記住我”,登錄、退出之後,用戶再次來到登錄頁,預設填寫上次登錄的用戶信息。 ...
  • 在也個html頁面中加入bootstrap是很方便,就是一般的將css和js文件通過Link和Script標簽就行。 那麼在一個用vue-vli生成的前端項目中如何加入?因為框架不一樣了,略微要適應一下。 腳手架生成項目 執行命令用webpack模板生成一個名為vuestrap的項目(名字任意) 在 ...
  • 六邊形 今天看到別人分享的六邊形學習 自己也試著做了一下 原理: 圖片旋轉 transfrom:rotate(120deg); 溢出隱藏 overflow:hidden; 我們要用三層div來實現旋轉效果 第一次 rotate(120deg) 第二次 rotate(-60deg) 第三次 rotat ...
  • ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...