很多人都知道瀏覽器的user-agent字符串,服務器端通過這個字符串進行客戶端的瀏覽器、操作系統、加密等級、瀏覽器語言、渲染引擎和版本信息的識別。從1993年NCSA發布首款瀏覽器Mosaic以來,這個字符串經歷了紛繁復雜的變化,以下是user-agent字符串的演變簡史。
1993年,NCSA公司發布了首款瀏覽器Mosaic,使用“NCSA_Mosaic/2.0(Windows 3.1)”作為user-agent字符串。
后來Mozilla瀏覽器問世,“Mozilla”意即“Mosaic Killer”,意思是要成為Mosaic瀏覽器的終結者。Mosaic自然不太高興,于是Mozilla就把名字改成Netscape,并把user-agent改為“Mozilla/1.0(Win 3.1)”。那個時候frame標簽很流行,Netscape支持frame,但Mosaic不支持,于是出現了“用戶代理嗅探”,如果字符串中帶有“Mozilla”字樣,服務器就發送frame給瀏覽器,否則就不發送。Netscape還開起了微軟的玩笑,笑稱Windows是“缺少調試的設備驅動器”,微軟很生氣,于是開發了自己的瀏覽器Internet Explorer,希望能夠成為“Netscape Killer”。
IE也支持frame,但它的user-agent字符串中沒有包含“Mozilla”,所以服務器不會發送frame給IE。微軟沒有太大耐心,他們就想著怎樣才能盡快讓服務器也能向IE發送frame,于是他們把IE聲明為與“Mozilla兼容”的瀏覽器,并使用了“Mozilla/1.22(compatible;MSIE 2.0;Windows 95)”的字符串。這樣,IE就能夠收到frame,微軟現在開心了,但其他人卻一頭霧水。微軟將IE捆綁在Windows上銷售,銷量比Netscape要好得多,于是第一場瀏覽器大戰爆發了。
Netscape在這場大戰中落敗,不過經過了一場浴火重生,變成了Mozilla。Mozilla開發了Gecko渲染引擎,并把user-agent改為“Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826”。
再后來,Mozilla變成Firefox,并把user-agent改為“Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0”。Gecko開始多元化發展,其他瀏覽器也開始使用它的代碼,并使用了“Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Comino/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越來越好,但IE沒有,于是出現了新一輪的用戶代理嗅探,聲稱自己使用了Gecko內核的瀏覽器總能收到更好的HTML代碼,但其他瀏覽器就沒這么好的待遇。
Linux的擁護者感到很傷心,因為他們開發了Konqueror,它使用了KHTML引擎,他們認為它比Gecko好。可惜的是,它不是Gecko,所以收不到好的頁面。于是Konqueror開始佯裝“Gecko”,使用了“Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)”作為user-agent字符串。
然后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.81.) Gecko/20061208 Firefox/2.0.0 Opera 9.51”、“Opera/9.51 (Windows NT 5.1; U; en)”。
蘋果開發了Safari瀏覽器,以KHTML為基礎,添加了很多新特性,并創建了一個分支,叫作WebKit。為了能夠獲得KHTML頁面,Safari稱自己為“Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5”。
經歷了慘敗,IE再次回歸,這次它把字符串改為”Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)”,這樣就能夠接收到好的頁面。
谷歌后來開發了Chrome瀏覽器,它使用了WebKit,有點像Safari。為了獲得Safari那樣的頁面,它佯裝自己是Safari,于是使用了字符串“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字符串變得越來越復雜,也越來越讓人摸不著頭腦,只因為各個瀏覽器在爭相“佯裝”對方。
查看原文:History of the browser user-agent string