我們接著介紹WebKit、Konqueror、Chrome、Opera瀏覽器用戶代理字符串的歷史,為我們接下來的檢測作準(zhǔn)備,雖然有一些我們用得很少,但也應(yīng)該有個了解,說不定那一天成為主流了,我們再急急忙忙來準(zhǔn)備就不太好.
5.WebKit
2003年,Apple公司宣布要發(fā)布自己的Web瀏覽器,名字定為Safari。Safari的呈現(xiàn)引擎叫WebKit,是Linux平臺中Konqueror瀏覽器的呈現(xiàn)引擎KHTML的一個分支。幾年后,WebKit獨立出來成為了一個開源項目,專注于呈現(xiàn)引擎的開發(fā)。
這款新瀏覽器和呈現(xiàn)引擎的開發(fā)人員也遇到了與Intemet Explorer 3.0類似的問題:如何確保這款瀏覽器不被流行的站點拒之門外?答案就是向用戶代理字符串中放入足夠多的信息,以便站點能夠信任它與其他流行的瀏覽器是兼容的。于是,WebKit的用戶代理字符串就具備了如下格式:
Mozilla/5.0(平臺;加密類型;操作系統(tǒng)或CPU;語言)AppleWebKit/AppleWebKit版本號
(KHTML, like Gecko) Safari/Safari版本號
以下就是一個示例:
Mozilla/5.0 (Macintosh;U; PPC Mac OS X;en) AppleWebKit/124 (KHTML, like Gecko)
Safari/125.1
顯然,這又是一個很長的用戶代理字符串。其中不僅包含了Apple WebKit的版本號,也包含了Safari的版本號。出于兼容性的考慮,有關(guān)人員很快就決定了將Safari標(biāo)識為Mozilla。至今,基于WebKit的所有瀏覽器都將自己標(biāo)識為Mozilla 5.0,與基于Gecko的瀏覽器完全一樣。但Safari的版本號則通常是瀏覽器的編譯版本號,不一定與發(fā)布時的版本號對應(yīng)。換句話說,雖然Safari l.25的用戶代理字符串中包含數(shù)字125.1,但兩者卻不一一對應(yīng)。
Safari預(yù)發(fā)行1.0版用戶代理字符串中最耐人尋味,也是最飽受詬病的部分就是字符串n(KHTML,like Gecko)“。Apple因此收到許多開發(fā)人員的反饋,他們認為這個字符串明顯是在欺騙客戶端和服務(wù)器,實際上是想讓它們把Safari當(dāng)成Gecko(好像光添加Mozilla/5.o還嫌不夠)。Apple的回應(yīng)與微軟在IE的用戶代理字符串遭到責(zé)難時如出一轍:Safari與Mozilla兼容,因此網(wǎng)站不應(yīng)該將Safari
用戶拒之門外,否則用戶就會認為自己的瀏覽器不受支持。
到了Safari 3.0發(fā)布時,其用戶代理字符串又稍微變長了一點。下面這個新增的Version記號一直到現(xiàn)在都被用來標(biāo)識Safari實際的版本號:
Mozilla/5.0 (Macintosh;U; PPC Mac OS X; en) AppleWebKit/522.15.5 (KHTML, likeGecko) Version/3.0.3 Safari/522. 15.5
需要注意的是,這個變化只在Safari中有,在WebKit中沒有。換句話說,其他基于WebKit的濟覽器可能沒有這個變化。南昌網(wǎng)站設(shè)計公司技術(shù)人員認為,確定瀏覽器是否基于WebKit要比確定它是不是Safari更有價值——就像針對Gecko -樣。
6.Konqueror
與KDE Linux集成的Konqueror,是一款基于KHTML開源呈現(xiàn)引擎的瀏覽器。盡管Konqueror只能在Linux中使用,但它也有數(shù)量可觀的用戶。為確保最大限度的兼容性,Konqueror效仿IE選擇了如下用戶代理字符串格式:
Mozilla/5.0 (compatible;Konqueror/版本號;操作系統(tǒng)或CPU)
不過,為了與WebKit的用戶代理字符串的變化保持一致,Konqueror 3.2又有了變化,以如下格式將自己標(biāo)識為KHTML:
Mozilla/5.o(compatible; Konqueror/版本號;操作系統(tǒng)或CPU)KHTML/ KHTML版本號(like Gecko)
下面是一個例子:
Mozilla/5.O(compatible; Konqueror/3.5; SunOS) KHTML/3.5.0(like Gecko)
其中,Konqueror與KHTML的版本號比較一致,即使有差別也很小,例如Konqueror 3.5使用KHTML 3.5.1。
7.Chrome
谷歌公司的Chrome瀏覽器以WebKit作為呈現(xiàn)引擎,但使用了不同的JavaScript引擎。在Chrome0.2這個最初的beta版中,用戶代理字符串完全取自WebKit,只添加了一段表示Chrome版本號的信息,格式如下:
Mozilla/5.O(平臺;加密類型;操作系統(tǒng)或CPU;語言)AppleWebKit/AppleWebKit版本號(KHTML,like Gecko) Chrome/ Chrome版本號Safari/ Safari版本Chrome 0.2給出的完整的用戶代理字符串如下:Mozilla/5.0(Windows;U; Windows NT 5.1; en-US) AppleWebKit/525. 13 ( KHTML,like Gecko) Chrome/0.2.149. 29 Safari/525. 13
其中,WebKit版本與Safari版本看起來似乎始終會保持一致,盡管沒有十分的把握①。
8.Opera
僅就用戶代理字符串而言,Opera應(yīng)該是最有爭議的一款瀏覽器了。Opera默認的用戶代理字符串是所有現(xiàn)代瀏覽器中最合理的——正確地標(biāo)識了自身及其版本號。在Opera 8.0之前,其用戶代理字符串采用如下格式:
Opera/版本號(操作系統(tǒng)或CPU;加密類型)[語言]
Windows XP中的Opera 7.54會顯示下面的用戶代理字符串:
Opera/7. 54 (Windows NT 5 .1;U) [en]
Opera 8發(fā)布后,用戶代理字符串的“語言”部分被移到圓括號內(nèi),以便更好地與其他瀏覽器匹配,如下所示:
opera/版本號(操作系統(tǒng)或CPU;加密類型;語言)
Windows XP中的Opera 8會顯示下面的用戶代理字符串:
opera/8.O(Windows NT 5.1; U; en)
默認情況下,Opera會以上面這種簡單的格式返回一個用戶代理字符串。目前來看,Opera也是四大主要瀏覽器中@,唯一一個使用產(chǎn)品名和版本號來完全徹底地標(biāo)識自身的瀏覽器??墒?,與其他瀏覽器一樣,Opera在使用自己的用戶代理字符串時也遇到了問題。即使技術(shù)上正確,但因特網(wǎng)上仍然有不少瀏覽器嗅探代碼,只鐘情于報告Mozilla產(chǎn)品名的那些用戶代理字符串。另外還有相當(dāng)數(shù)量的代碼則只對IE或Gecko感興趣。Opera沒有選擇通過修改自身的用戶代理字符串來迷惑嗅探代碼,而
是干脆選擇通過修改自身的用戶代理字符串將自身標(biāo)識為一個完全不同的瀏覽器。
Opera 9以后,出現(xiàn)了兩種修改用戶代理字符串的方式。一種方式是將自身標(biāo)識為另外一個瀏覽器,如Firefox或者IE。在這種方式下,用戶代理字符串就如同F(xiàn)irefox或IE的用戶代理字符串一樣,
只不過末尾追加了字符串Opera及Opera的版本號。下面是一個例子:
Mozilla/5.0(Windows NT 5.1;Uj en; rv:1.8.1)Gecko/200 61208 Fjrefox/2.0.O Opera 9.50
Mozilla/4.O(compatible; MSIE 6.Oj Windows NT 5.1;en) Opera 9.50
第一個字符串將Opera 9.5標(biāo)識為Firefox2,同時帶有Opera版本信息。第二個字符串將Opera 9.5
標(biāo)識為IE 6,也包含了Opera版本信息。這兩個用戶代理字符串可以通過針對Firefox或IE的大多數(shù)測試,不過還是為識別Opera留下了余地。
Opera標(biāo)識自身的另一種方式,就是把自己裝扮成Firefox或IE。在這種隱瞞真實身份的情況下,用戶代理字符串實際上與其他瀏覽器返回的相同——既沒有Opera字樣,也不包含Opera版本信息。
換句話說,在啟用了身份隱瞞功能的情況下,無法將Opera和其他瀏覽器區(qū)別開來。另外,由于Opera喜歡在不告知用戶的情況下針對站點來設(shè)置用戶代理字符串,因此問題就更復(fù)雜化了。例如,打開My Yahoo!站點(http://www.yahoo.com)會自動導(dǎo)致Opera將自己裝扮成Firefox。如此一來,要想識別Opera就難上加難了。
本文僅限內(nèi)部技術(shù)人員學(xué)習(xí)交流,不得作于其他商業(yè)用途.文章出自:南昌網(wǎng)站建設(shè)公司-百恒網(wǎng)絡(luò) http://m.gimmickmag.com 如轉(zhuǎn)載請注明出處!