瀏覽器野史 UserAgent列傳

litten.me發表於2017-12-04

  某天,我做一個小專案,需要判斷一下瀏覽器型別。簡單的呀。

  控制檯敲下:navigator.userAgent

  瀏覽器回應:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36

  天,這串是啥?你怎麼連話都說不清楚?

  我對userAgent並不陌生,但明明一個單詞就可以說清楚的事情,卻是這麼掏心掏肺的回答。怪可憐的,一定有冤情。

  後來我查閱了很多資料,發現歷史非常的精彩。

  大事年表

  • 1990年: Nexus(WorldWideWeb)誕生
  • 1993年1月23日:Mosaic誕生
  • 1994年12月:Netscape(Mozilla)誕生
  • 1995年4月:Opera誕生
  • 1995年8月16日:Internet Explorer誕生
  • 2002年9月23日:Firefox誕生
  • 2003年1月7日:Safari誕生
  • 2008年9月2日:Chrome誕生

  一、盤古開天地

  很久很久之前,上古大神Berners-Lee發明了WorldWideWeb,即全球資訊網。同時,李大神也發明了第一款瀏覽器。真是具有跨時代意義的工具呀,好偉大呀,人們在想,叫什麼好呢?

  但大神就是大神,大神內心的想法又豈是爾等凡人能夠肆意揣摩?

  萬萬沒想到,李大神說,我這瀏覽器,也叫WorldWideWeb!不行麼?

  行行行。

  雖然李大神起名字這麼拽,但他後來發覺,還是得賦予一點承上啟下的歷史意義,就改名成“Nexus”。值得注意的是,這瀏覽器,居然是可以相容Unix跟Microsoft DOS的。它在當時流行的各種電腦上跑得飛起,應用也越來越廣,被稱為“殺手級應用”。殺手級…你們看網際網路一開始就是這麼的腥風血雨。

  但這個瀏覽器,還不支援圖片的顯示,這是出現UserAgent的導火索。

  二、唐堯虞舜

  93年,伊利諾大學的NCSA組織認為,瀏覽器無圖無真相,這不好。因而他們發明了第一款可顯示圖片的瀏覽器。

  真是具有跨時代意義的工具呀,好偉大呀,人們在想,叫什麼好呢?

  但大神就是大神,大神就是連起名字都讓你驚心動魄。

  NCSA組織說,它能顯示圖片,偏偏我們就要叫它“馬賽克(Mosaic)”!不行麼?

  行行行。

  但有人就問了,Nexus不顯示圖片,Mosaic能顯示,你們讓html提供者怎麼寫程式碼?你們是不是想逼死選擇困難症患者?有沒有考慮過天秤座的感受?

  因而UserAgent就誕生了。Mosaic將自己標誌為NCSA_Mosaic/2.0 (Windows 3.1),大家該怎麼寫程式碼就怎麼寫,但請求會帶上這個資訊,伺服器就知道該不該返回能顯示圖片的html。UserAgent君,出生時跟我們設想的一樣簡單,僅僅標明瞭自己是什麼瀏覽器,在什麼系統執行,以及各自的版本號。

  新舊瀏覽器們像彬彬有禮的君王,商議和讓位是為了更好的繁榮。但風雨欲來。

  三、楚漢爭霸

  像劉邦一樣,走出來一個攪局的小流氓。當然他還是很有志向的,他的目標,就是戰勝霸主Mosaic。後來,他還真的做到了。

  如今,所有現代瀏覽器的UserAgent裡都有它的標誌,就像漢朝之後,我們都稱為“漢”人。一群很有天賦的程式設計師,一起締造了它的輝煌。

  真是具有跨時代意義的工具呀,好偉大呀,人們在想,它叫什麼呢?

  但大神就是大神,大神就是讓你永遠也猜不到他們想了個什麼名字。

  大神們說,叫Mozilla,不行麼?

  行。但什麼意思呢?

  含義有二。其一,哥斯拉(Godzilla)諧音,誠然是一頭野心勃勃的怪獸;其二,”Mosaic Killa”之意,Killa是俚語中Killer的拼法,即“馬賽克的終結者”,赤裸裸的挑戰。

  驚呆了的Mosaic小心翼翼的念著Mozilla這發音:“Mo…摸咋了?”勃然大怒,“摸你妹!”

  鑑於Mosaic當時的權勢,Mozilla改名成Netscape Navigator(網景航海家)。小怪獸突然變成有點文藝小清新的名字,鬱悶得很,但內心的血液沸騰著。雖然叫大名叫網景,但它把UserAgent偷偷設定成Mozilla/1.0 (Win3.1)。還是摸咋了?咬我?

  四、宋元之戰

  很快,NetScape戰勝了Mosaic,成為了新的霸主,因為其更優的展示。

  NetScape最先支援了html框架顯示,就是簡單的table佈局,內外邊距之類,僅僅這點就將Mosaic拋諸身後。區別這兩個瀏覽器,還是用的UserAgent。如果是UserAgent裡含有“Mozilla”字樣,那就傳送支援框架的頁面,否則,就傳送不含框架的頁面。

  NetScape帝國日益龐大,歌舞昇平,一切風平浪靜,直到微軟的鐵騎揮軍南下。

  微軟釋出了一款跟系統強繫結的瀏覽器,真是具有跨時代意義的工具呀,好偉大呀,人們在想,它叫什麼呢?

  不用想了,就是IE。這命名也相當簡單粗暴,Internet Explorer,直接把這工具的用途拍在你臉上。連說明書都可以免了。

  IE也是支援html標準框架的,但由於前面的歷史原因,人們只會給UserAgent裡含有“Mozilla”字樣的瀏覽器傳送含框架的頁面。但這點小事能難倒我大微軟?IE呵呵一笑,把自己的UserAgent改成Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)。看,我這裡也有“Mozilla”字樣,也能收到含框架的頁面了!

  當然,這個小流氓行為,跟後來把IE和Windows捆綁一起銷售的大流氓行為比起來,根本不為足道。後面的故事我們也知道了,IE把NetScape幹掉了。但它的身體上,卻永遠的烙上了“Mozilla”的印記。

  五、康乾盛世

  看過奧特曼的都知道,怪獸被打敗了會再回來。別忘了NetScape曾擁有一批大神們,失敗後,他們圍繞著瀏覽器排版引擎Gecko(壁虎)成立了非正式組織Mozilla。小怪獸再次出發。大神們發明了另一款優秀的瀏覽器,它在外掛擴充和開發除錯領域做出的貢獻,絕對可以載入網際網路歷史。

  真是具有跨時代意義的工具呀,好偉大呀,人們在想,它叫什麼呢?

  但大神就是大神,大神就是即使你知道了Mozilla的命名都是野獸,卻還是猜不到是什麼。

  Mozilla說,我們浴火重生,叫Phoenix(鳳凰)!不行麼?

  真不行。

  剛推出就被人告了,原來已經有一家公司叫做“鳳凰科技”。

  Mozilla瀑布汗,改名叫Firebird(火鳥)!還不行麼?

  我們得原諒一下他們的取名,雖然現在看來滿滿的山寨感,可放在那個時代,Firebird這名字很炫酷。就像你當初的QQ暱稱叫赤炎天使感覺依然良好一樣。

  但是,他們發現,業內有個資料庫系統,也叫的Firebird…淚流滿面的Mozilla感慨重生好難呀。最後才決定叫Firefox(火狐)。

  基於Gecko引擎的Firefox非常優秀,為了告訴大家,我使用了這個引擎,它標誌自己的UserAgent為Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0
這時候的UserAgent,雖然長了點,但它並不混亂,準確的標明瞭系統,排版引擎,瀏覽器名稱等資訊。雖然IE這時已經佔有了很大的市場份額,但基本停步不前;而Mozilla經過一段時間的修生養息,Firefox在業內廣受好評,得到了快速的發展。

  時值2003年,web2.0的浪潮前夕,瀏覽器的發展達到了空前的盛世。

  然而所謂否極泰來,盛極則衰。涅槃的Firefox迎來盛世,卻又恰恰由於盛世,決定了UserAgent糾結的命運。

  六、師夷長技

  前面說到,微軟靠Windows系統捆綁IE銷售。而Windows自然也有它的對手,Linux。一個技術快速發展的時代,系統的世界裡也是戰火紛飛。Linux系統自從有了視覺化介面,也需要瀏覽器呀。桌面系統KDE的締造者們就發明了一個。

  真是具有跨時代意義的工具呀,好偉大呀,人們在想,它叫什麼呢?

  但大神就是大神,大神就是講究先從文字上佔據壓垮你的氣勢。

  先有Navigator航海家,再有Explorer探索者,我們就叫Konqueror(Conqueror的變體)征服者吧。

  行行行。我已懶得理這幫大神…

  可是,問題來了。Konqueror使用KHTML排版引擎,即使它們認為自己跟Gecko引擎一樣優秀,但使用者不買單。你UserAgent裡沒有“Gecko”字樣,我就不給你經過優良排版的html。

  結果,Konqueror思來想去,做了一個艱難但很萌的決定,把UserAgent寫成Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)

  這就是現代瀏覽器裡like Gecko這一萌詞的由來。

  就這樣,偉大的排版引擎KHTML為了獲得更好的資源,師夷長技。這並沒什麼不好,卻造成了UserAgent的越發混亂。

  KHTML與Gecko這一對,永遠卿卿我我比翼雙飛在UserAgent裡面了。那個滿含深意的“like”,有人覺得翻譯成“像”,但也有人覺得應該是“喜歡”…

  七、世界大戰

  首先是IE冷靜下來了,他覺得,你們不帶這麼玩的?

  就我年少時不懂事,首先改了個Mozilla字樣,後面追究這歷史我豈不是成了罪魁禍首?我改還不行嗎?

  在IE6,它明確自己UserAgent為Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)。除去已經註定不可抹去的“Mozilla”字樣,其餘資訊簡潔,準確,清晰。

  但事態已經不可收拾。

  Opera給這狂躁的世界添了一把火。它覺得,易容術非常炫酷呀。Opera直接在選單提供了Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51Opera/9.51 (Windows NT 5.1; U; en)三個選擇項。第一個是易容成IE,第二個是易容成火狐,第三個才是自己,選誰就是誰!

  其實這並不是一件壞事。因為Opera是站在能夠讓使用者通過選擇,去獲得更好的瀏覽體驗的基礎上的。你提供選擇,或是不提供,混亂的UserAgent還是在這,不離,不棄。再者,這對網頁的開發者有極大的好處,在某些情況,你不必同時開啟幾個不同的瀏覽器去除錯。到目前,最新的Chrome瀏覽器更加炫酷,能夠支援近40種不同的UserAgent,甚至你還可以自定義。當然這是後話。

  與此同時,蘋果公司依靠核心WebKit,開發出Safari,命名UserAgent為Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5

  有人就會問了,不是Webkit核心嗎,怎麼還有KHTML, like Gecko?注意,核心Webkit包含了一個排版引擎叫WebCore,而WebCore是KHTML衍生而來的。也就是說,WebCore是KHTML的兒子,子承父業,基因差不多。為了能夠正常排版,safari只能這麼寫。

  後來,google也開發了自己的瀏覽器Chrome,其核心也是Webkit,但它設定UserAgent為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。Safari一看,不對勁啊!你怎麼也在後面寫有Safari?Chrome呵呵一笑,你懂的。

  因此,請讓我一口氣說完下面這一段:

  Chrome希望能得到為Safari編寫的網頁,於是決定裝成Safari,Safari使用了WebKit渲染引擎,而WebKit呢又偽裝自己是KHTML,KHTML呢又是偽裝成Gecko的。同時所有的瀏覽器又都宣稱自己是Mozilla。

  這就是整個UserAgent世界大戰的格局…

  八、軍閥混戰

  將目光聚焦到國內,更是狼煙四起,混亂不堪。大家都知道,瀏覽器是網際網路的入口,這塊肥肉誰也不想丟。因而一個接一個的“國產”瀏覽器進入鬥獸場。

  360,百度,QQ,UC,搜狗,獵豹,遨遊,世界之窗…你能說出一大堆。連淘寶,酷狗,hao123都有瀏覽器,不信你搜。

  注意我前面“國產”兩個字必須加上雙引號,因為這個made in china並不純。國人並沒能像遠古大神一樣,硬生生發明一個核心出來,我們更擅長“微創新”。

  利用Trident(IE的核心),包裝一下皮膚,美化一下,就可以說:完美相容

  利用Webkit,包裝一下皮膚,美化一下,就可以說:極速瀏覽

  把兩個核心都包起來,就可以說:智慧雙核

  是微創新!讀書人的事,能叫偷嗎?

  在這插播一下,瀏覽器的“雙核”,並不是你聽說手機雙核電腦雙核那回事。再多個核,速度也不會更快,當然這麼說,會顯得很厲害的樣子。德藝雙馨,智勇雙全,名利雙收,才貌雙絕,夫妻雙雙把家還,你看帶“雙”字的詞都很牛的。

  但我上面的敘述,的確有誇張的成分。瀏覽器的誕生,肯定不僅僅是包一下皮膚那麼簡單,國內的工程師們,也苦心研究做了許多工作。如果要說優化策略,我可以再寫一篇超級長的文章。優化無止境,路漫漫其修遠,向同行們致敬。只是我非常討厭那些不把事實說清楚,純粹靠文案去忽悠人的產品…

  話說回來,這麼多國產瀏覽器,總得靠不同UserAgent標誌自己呀。

  大家自動分為兩個陣營:使用Trident核心的,在IE已有UserAgent後新增自己的名稱;使用Webkit核心的,就在Chrome的UserAgent後面新增。

  前者像QQ瀏覽器:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.7.26717.400)

  後者像獵豹:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER
當然雙核瀏覽器誠然就是牆頭草,切換核心時UserAgent也需要跟著變化。

  如此的混戰格局,這廂的IE和Chome想必也是醉了。

  九、國共內戰

  適者生存是不變的生存法則,國產瀏覽器們經過一段時間的使用者篩選,自然優勝劣汰。時值2010年,真正還在運營和更新的瀏覽器數量慢慢下降,使用者集中在幾家表現更優異的廠商手中。就在這時,好看的故事來了——3Q大戰爆發。

  有人說,騰訊電腦管家的推出是導火索。其實這場仗,大家都忍了好久,推不推出,都一定會在某個事件後爆發。360瀏覽器是奇虎的重量級產品,使用者量眾多,2009年它推出一個功能:過濾其它網站的廣告。誠然民眾們都很喜歡。可是其他網際網路公司肯定就不樂意了,使用者看不到更點選不到廣告,這錢還怎麼賺?

  因而在3Q大戰爆發後,騰訊的一個手段就是:如果你使用360瀏覽器,就不能訪問QQ的網站(單單QQ空間就有巨大的使用者量),也直接反攻360的最大收入來源。一個艱難的決定背後,往往是需要無數種的技術戰略支撐的。企鵝判斷使用者是否使用360瀏覽器,依靠的就是UserAgent裡是否有“360SE”的字樣。

  戰報傳來:號外,360瀏覽器上不了QQ空間!已經買了黃鑽的殺馬特貴族急了呀!只能換瀏覽器了呀!感覺侢乜卟噲噯嘞呀!

  2011年11月3日,騰訊網站封殺360瀏覽器

  2011年11月4日,360瀏覽器訪問量僅為昨日一半

  2011年11月5日,360瀏覽器訪問量幾乎為0

  有人說,騰訊就這麼快贏了?恰恰相反,360瀏覽器通過一次強制的自動升級,又可以訪問QQ的網站了。360的工程師們在5日使用了偽裝術——把“360SE”字樣從UserAgent中去掉!

  意思就是,360瀏覽器的UserAgent跟IE完全一樣,你根本判斷不出來(因而訪問量為0)。就怕流氓有文化!企鵝傻眼了,總不能把大微軟的IE也一併給禁了吧…

  這場土匪遇惡霸的耍流氓大戰,最終通過法律而化解。企鵝在技術側拿360沒辦法,而360則得到了一個跟IE一樣的身份證。在這場內戰中,受傷的除了廣大網民們,其實還有令人心疼UserAgent君,以往讓它越長越長就算了,這次長了還得閹割掉,真心dan疼呀。

  十、明日邊緣

  看到這裡,大家會明白一個道理:如果未來不出現一款霸主級別的瀏覽器(或核心),UserAgent應該不會有大變化了。

  不過,這道理並不全對。別忘了,移動側也是有瀏覽器的。

  在早期能上網的手機裡,內建了各手機廠商自研的瀏覽器。這些瀏覽器並不需要像PC一樣的複雜設計,可以訪問wap網頁就足夠了。因而它們的UserAgent命名,怎麼簡單怎麼來,就直接叫諾基亞 3100 Nokia3100/06.01 (UCWEB 3.3B)PHILIPS755 ObigoInternetBrowser/2.0 這樣,有甚者連瀏覽器叫什麼都不帶 TCL-3199三星 E618 SEC-SGHE618

  這樣任由發展下去,一種要歷史重演,往日重現的即視感壓迫而來。

  web世界的聯合國——W3C組織,站在明日邊緣,面對著歷史和未來,終於發話,它制定UserAgent標準,以後都得按這規範去起名字。詳細請閱User Agent Accessibility Guidelines。至此,命運坎坷的UserAgent終於逐步走向規範。W3C大法好,有人說你怎麼不早點來拯救世界呀!其實W3C一直在努力,但規範的制定,到推廣至大家認可並執行,是一條漫長的道路,需要時間,也需要實踐。

  W3C組織,在制定web標準這件工作之外,再我看來,還有兩個身份:1、和事佬;2、背黑鍋。和事不成,就得背黑鍋。是的就是這樣。

  彩蛋

  那麼,我們的故事接近尾聲。還有一些有趣的小彩蛋。

  1. Chome 28開始,與蘋果正式分道揚鑣,採用Blink核心,但它的UserAgent並不改變。
  2. 淘寶封殺微信開啟淘寶頁面,靠的就是微信內建瀏覽器UserAgent裡的MicroMessenger字樣。其實微信也可以像當初360一樣把UserAgent去掉,但微信並不這樣做。
  3. 360出招之時留有後招。也許,它一開始就想到了騰訊會告他們對於UserAgent的欺瞞,因而它其實提供了設定項。預設設定是“保持跟IE一樣的UserAgent”,但使用者也可以不勾選。只是這選項比較隱蔽,而且你重啟瀏覽器後…又會變回預設設定。如果沒有這個小小的設定,結果大家可以自行想象。
  4. 微軟又玩新花樣了,在IE11中,去掉了以往的MSIE字樣。初步猜測此舉是為了使現有的 CSS hack 失效,避免過去網頁設計師對IE差別對待的情況再度發生。但又會引發其他問題啊親。

相關文章