![user-agent檢測詳解.docx_第1頁](http://file.renrendoc.com/FileRoot1/2020-1/9/82501521-c8f6-4611-95e7-9703d7c0d3c6/82501521-c8f6-4611-95e7-9703d7c0d3c61.gif)
![user-agent檢測詳解.docx_第2頁](http://file.renrendoc.com/FileRoot1/2020-1/9/82501521-c8f6-4611-95e7-9703d7c0d3c6/82501521-c8f6-4611-95e7-9703d7c0d3c62.gif)
![user-agent檢測詳解.docx_第3頁](http://file.renrendoc.com/FileRoot1/2020-1/9/82501521-c8f6-4611-95e7-9703d7c0d3c6/82501521-c8f6-4611-95e7-9703d7c0d3c63.gif)
![user-agent檢測詳解.docx_第4頁](http://file.renrendoc.com/FileRoot1/2020-1/9/82501521-c8f6-4611-95e7-9703d7c0d3c6/82501521-c8f6-4611-95e7-9703d7c0d3c64.gif)
![user-agent檢測詳解.docx_第5頁](http://file.renrendoc.com/FileRoot1/2020-1/9/82501521-c8f6-4611-95e7-9703d7c0d3c6/82501521-c8f6-4611-95e7-9703d7c0d3c65.gif)
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
user-agent檢測詳解特性檢測并非瀏覽器檢測一、瀏覽器們的家族史較古的瀏覽器1993年,NCSA 發(fā)布了首款 web 瀏覽器 Mosaic。它的 user-agent 字串非常簡潔:Mosaic/0.9雖然當(dāng)時由于它對操作系統(tǒng)和平臺的依賴性,但是基本格式還是很簡單明了。在文本中,斜杠前面是產(chǎn)品名稱(可能會顯示為 NCSA Mosaic 或是其他類似的字),斜杠后面是產(chǎn)品版本號。Netscape Communications 開發(fā)了 web 瀏覽器 Mozilla(當(dāng)時號稱“Mosaic 殺手”)。他們首款公開發(fā)行版本: Netscape Navigator 2 的user-agent 字串具有如下格式:Mozilla/Version Language (Platform; Encryption)Netscape 按之前的做法在 user-agent 字串的前半部分使用了產(chǎn)品名稱和產(chǎn)品版本,但在后面增加了下列信息:1. Language - 表示應(yīng)用程序用的是哪個語言2. Platform - 表示應(yīng)用程序是在什么操作系統(tǒng)和/或平臺中運行3. Encryption - 表示應(yīng)用程序包含了什么安全加密類型。其中的值可能是U(128位加密)、I(40位加密)、N(沒加密)。Netscape Navigator 2 的 user-agent 字串的示例:Mozilla/2.02 fr (WinNT; I)上面的字串指: Netscape Navigator 2.02 、法語 、Windows NT 、40位加密。在當(dāng)時,通過 user-agent 字串中的產(chǎn)品名稱,可以正確判斷使用的是哪個 web 瀏覽器。Netscape Navigator 3 、Internet Explorer 31996年,Netscape Navigator 3 發(fā)布,它遠遠超過 Mosaic 成為當(dāng)時最流行的 web 瀏覽器。而 user-agent 字串只有些小的變化:去掉了語言部分,多了個放操作系統(tǒng)或CPU的可選信息。格式如下:Mozilla/Version (Platform; Encryption ; OS-or-CPU description)在 Windows 系統(tǒng)中 Netscape Navigator 3 的 user-agent 字串的示例:Mozilla/3.0 (Win95; U)上面的字串指:Netscape Navigator 3 、Windows 95 、128 位加密。在 Windows 系統(tǒng)中,字串里面不會顯示 OS 或 CPU 的信息。Netscape Navigator 3 發(fā)布不久,微軟公布了它的首款 web 瀏覽器: IE 3,但是 Netscape 是當(dāng)時首選瀏覽器,大多數(shù)服務(wù)器在加載頁面前都會檢查 user-agent 是否為該款瀏覽器。IE 如果不兼容Netscape user-agent 字串,使用 IE 的用戶就根本打不開這些頁面,于是造就了如下格式:Mozilla/2.0 (compatible; MSIE Version; Operating System)在 Windows 95 中 IE 3.02 的 user-agent 字串的示例:Mozilla/2.0 (compatible; MSIE 3.02; Windows 95)由于當(dāng)時的瀏覽器嗅探只查 user-agent 字串中的產(chǎn)品名稱部分,結(jié)果 IE 搖身一變被識別成了 Mozilla,偽裝成 Netscape Navigator。這個做法引發(fā)了對瀏覽器識別的爭論。從此以后,瀏覽器真正的版本埋沒在了字串的中間。Netscape Communicator 4 、Internet Explorer 4至81997 年8月,Netscape Communicator 4 發(fā)布(發(fā)布的名稱中 Navigator 換成了 Communicator),它的 user-agent 字串格式與 3 版本一致。Windows 98 中 4 版本的 user-agent 字串如下:Mozilla/4.0 (Win98; I)Netscape 瀏覽器在更新時,版本也相應(yīng)增加。4.79 版本的 user-agent 字串如下:Mozilla/4.79 (Win98; I)微軟發(fā)布 IE 4 時,user-agent 字串更新了版本,格式如下:Mozilla/4.0 (compatible; MSIE Version; Operating System)在 Windows 98 中 IE 4 的 user-agent 字串的示例:Mozilla/4.0 (compatible; MSIE 4.0; Windows 98)可以看出,Mozilla 的版本與 IE 實際的版本一致,這樣就可以識別第4代瀏覽器了。但遺憾的是,不久 IE 4.5 馬上就發(fā)布了(只在 Mac 平臺),雖然 Mozilla 版本仍是 4,但是 IE 的版本改成如下:Mozilla/4.0 (compatible; MSIE 4.5; Mac_PowerPC)此后,IE 的版本一直到 7 都沿用了這個模式。而 IE 8 的user-agent 字串添加了呈現(xiàn)引擎(rendering engine)版本:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)新增的呈現(xiàn)引擎非常重要!這樣 IE8 以 MSIE 7.0 兼容模式運行時,Trident 版本保持不變,而原先 IE7 的 user-agent 字串不包括 Trident 版本。這樣可以區(qū)分 IE7 與 IE8 運行的兼容模式。注意:別指望能從 Mozilla 版本中得到什么靠譜的信息。GeckoGecko 是 Firefox 的呈現(xiàn)引擎。Gecko 首次開發(fā)是作為 Mozilla 瀏覽器 Netscape 6 的一部分。Netscape 6 的 user-agent 字串的結(jié)構(gòu)是面向未來的,新版本反應(yīng)出從 4.x 版本的簡單變得較為復(fù)雜,它的格式如下: Mozilla/MozillaVersion (Platform; Encryption; OS-or-CPU; Language; PrereleaseVersion)Gecko/GeckoVersion ApplicationProduct/ApplicationProductVersion為了更好的理解上面的 Gecko user-agent 字串格式,下面來看看各種從基于 Gecko 瀏覽器中取得的字串。在 Windows XP 中的 Netscape 6.21:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.4) Gecko/20011128 Netscape6/6.2.1在 Linux 中的 SeaMonkey 1.1a:Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1b2) Gecko/20060823 SeaMonkey/1.1a在 Windows XP 中的 Firefox 1 :Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1) Gecko/20071127 Firefox/1Mac OS X 中的 Camino 1.5.1:Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en; rv:) Gecko/20070809 Camino/1.5.1上面都是基于 Gecko 的瀏覽器所取得的 user-agent 字串,區(qū)別只是版本有所不同。Mozilla 版本 5.0 是自從首款基于 Gecko 發(fā)布后就一直不變,而且以后有可能也不會變。WebKit2003 年,Apple 宣布發(fā)布首款他們自主開發(fā)的 web 瀏覽器:Safari。它的呈現(xiàn)引擎叫 WebKit。它是 Linux 中的 web 瀏覽器 Konqueror 呈現(xiàn)引擎 KHTML 的一個分支,幾年后,WebKit 的開源吸引了呈現(xiàn)引擎的開發(fā)人員。這款新瀏覽器和呈現(xiàn)引擎的開發(fā)人員也遇到了曾經(jīng) IE 3.0 類似的問題:怎樣才能溶入主流而不被踢出局?答案是:在 user-agent 字串中放詳盡的信息,以便騙取網(wǎng)站的信任使它與其它流行的瀏覽器兼容。user-agent 字串格式如下:Mozilla/5.0 (Platform; Encryption; OS-or-CPU; Language) AppleWebKit/AppleWebKitVersion (KHTML, like Gecko) Safari/SafariVersion下面是示例:Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125.1這 又是個挺長的 user-agent 字串,其中包括的信息既有 Apple WebKit 的版本,也有 Safari 的版本。凡是基于 WebKit 的瀏覽器都將自己偽裝成了 Mozilla 5.0,與基于 Gecko 瀏覽器完全一樣。但 Safari 的版本是瀏覽器的構(gòu)建版本號(build number)。Safari 1.25 在 user-agent 字串中號為 125.1(如上所示)。Safari 版本 3 的 user-agent 字串包括了實際的 Safari 版本:Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.0.3 Safari/522.15.5其 中的“(KHTML, like Gecko)”在 Safari 1.0 預(yù)覽版本中就有了,這字串部分是最耐人尋味又飽受詬病。Apple 的野心是為了讓開發(fā)人員把 Safari 當(dāng)成 Gecko,所以采取了當(dāng)初微軟 IE user-agent 的類似做法:Safari 是兼容 Mozilla 的,否則 Safari 用戶會認為用的瀏覽器不受支持。而其它基于 WebKit 的瀏覽器與 Safari 不同的是,沒有上面說的這個情況,所以檢測斷定瀏覽器是否基于 WebKit 比看有沒有明確標(biāo) Safari 更有用。KonquerorKonqueror 是款在 KDE Linux 桌面環(huán)境中的瀏覽器,基于 KHTML 開源呈現(xiàn)引擎。它只發(fā)布了在 Linux 的版本,但是擁有活躍的用戶群。為了兼容性最大化,user-agent 字串的格式也緊跟 IE 的后塵:Mozilla/5.0 (compatible; Konqueror/Version; OS-or-CPU)Konqueror 3.2 為了與 WebKit user-agent 字串變化保持一致,它將 KHTML 作為它的標(biāo)識:Mozilla/5.0 (compatible; Konqueror/Version; OS-or-CPU) KHTML/KHTMLVersion (like Gecko)如下所示:Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.0 (like Gecko)Konqueror 和 KHTML 的版本號比較一致,唯一的區(qū)別就是下點處不同,比如Konquerer 3.5、KHTML 3.5.1。ChromeGoogle Chrome 瀏覽器以 WebKit 作為呈現(xiàn)引擎,JavaScript 引擎卻用了另一種。最初發(fā)布的版本是 0.2,它的 user-agent 字串格式是在 webKit 信息的基礎(chǔ)上又增加了如下:Mozilla/5.0 (Platform; Encryption; OS-or-CPU; Language) AppleWebKit/AppleWebKitVersion (KHTML, like Gecko) Chrome/ChromeVersion Safari/SafariVersionChrome 0.2 user-agent 信息的示例如下:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/9 Safari/525.13雖我不敢完全保證,但很可能 WebKit 版本和 Safari 版本總會保持同步。OperaOpera 瀏覽器默認 user-agent 字串是現(xiàn)代瀏覽器中最合理的正確的標(biāo)識了它自己及其版本。 在 Opera 8.0 前,它的 user-agent 字串格式如下:Opera/Version (OS-or-CPU; Encryption) Language在 Windows XP 中 Opera 7.54 user-agent 字串示例:Opera/7.54 (Windows NT 5.1; U) enOpera 8 user-agent 字串的語言部分移到了括號內(nèi)。Opera/Version (OS-or-CPU; Encryption; Language)在 Windows XP 中 Opera 8 user-agent 字串示例:Opera/8.0 (Windows NT 5.1; U; en)當(dāng) 時 Opera 做為主流瀏覽器之一,它的 user-agent 字串是唯一使用產(chǎn)品名稱和版本完全真實的標(biāo)識了它自己。但是由于大量的瀏覽器嗅探代碼在 Internet 上像蝗蟲飛過般只吃標(biāo) Mozilla 產(chǎn)品名的 user-agent 字串,造成了 Opera 的 user-agent 字串發(fā)生了完全的改變。Opera 9 user-agent 字串有兩種修改的方式:一種方式是將自己標(biāo)識為 Firefox 或 IE 瀏覽器。在這種方式下,user-agent 字串與 Firefox 或 IE 的幾乎一樣,只不過末尾附加了“Opera”及版本號。如下所示:Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50前 一字串將 Opera 9.5 標(biāo)識為 Firefox 2。后一字串將 Opera 9.5 標(biāo)識為 IE 6,在兩個字串中都帶有 Opera 版本信息。雖然這種方式是作為 Firefox 或 IE 打開的,但也能識別出 Opera。另一種方法則是瀏覽器 user-agent 字串標(biāo)識偽裝成 Firefox 或 IE,同時也找不到“Opera”字串及其版本信息。這樣從字面上去區(qū)分 Opera 瀏覽器便成了“不可能完成的任務(wù)”。結(jié)論user-agent 字串史可以說明曾對 user-agent 嗅探說不的原因:IE 想要將自己識別為 Netscape 4,Konqueror 和 WebKit 想要識別為 Firefox,Chrome 想要識別為 Safari。這樣使得除 Opera 外所有瀏覽器的 user-agent 嗅探區(qū)別很小,想要從一堆茫茫瀏覽器海洋中找出有用的標(biāo)識太少了。關(guān)于嗅探要記?。阂豢顬g覽器與其它瀏覽器是兼容的,這樣造成了不能完全準確的斷定是哪款 瀏覽器。比如說 Chrome ,它聲稱任何可以在 Safari 3 訪問的網(wǎng)站 Chrome 也都可以訪問,但是對檢測 Chrome 沒有一點用。為了瀏覽器的兼容-這便是這個聲明的理由。-在此分割-起初前端工程師們就極力反對瀏覽器檢測,他們認為類似user-agent嗅探的方法是很不好的,理由是它并不是一種面向未來的代碼,無法適應(yīng)新版的瀏覽器。更好的做法是使用特性檢測,就像這樣:if (navigator.userAgent.indexOf(MSIE 7) -1) /do something 而更好的做法是這樣:if(document.all) /do something 這兩種方式并不相同。前者是檢測瀏覽器的特殊名稱和版本;后者卻是檢測瀏覽器的特性。UA嗅探能夠精確得到瀏覽器的類型和版本(至少能得知瀏覽器類型),而特性檢測卻是去確定瀏覽器是否擁有某個對象或者支持某個方法。注意這兩者是完全不同的。因為特性檢測依賴于哪些瀏覽器支持,當(dāng)出現(xiàn)新版本瀏覽器的時候需要繁瑣的確認工作。例如DOM標(biāo)準剛出現(xiàn)的時候,并不是所有瀏覽器都支持getElementById()方法,所以一開始代碼可能是這樣:if(document.getElementById) /DOM element = document.getElementById(id); else if (document.all) /IE element = document.allid; else if (document.layers) /Netscape -1; /下面這行代替上面那行 var isIE = !document.all;這些變化說明大家對“不要使用UA嗅探”存在誤解不再對瀏覽器的詳細信息進行檢測,取而代之的是通過特性的支持來推斷。這種基于瀏覽器特性檢測的方式非常不好。后來前端們發(fā)現(xiàn)document.all并不可靠,更好的檢測IE變?yōu)椋簐ar isIE = !document.all & document.uniqueID;這種實現(xiàn)方式陷入歧途。不僅需要費時費事地去識別瀏覽器所增加的特性支持,另外也不能確定其它瀏覽器開始支持相同的特性。如果你認為這樣的代碼并未被廣泛使用,那么看看來自于老版本的Mootools代碼片段吧:/from MooTools 1.1.2 if (window.ActiveXObject) window.ie = windowwindow.XMLHttpRequest ? ie7 : ie6 = true; else if (document.childNodes & !document.all & !navigator.taintEnabled) window.webkit = windowwindow.xpath ? webkit420 : webkit419 = true; else if (document.getBoxObjectFor != null | window.mozInnerScreenX != null) window.gecko = true;注意它是如何使用特性檢測的。我可以指出它一系列的問題,比如通過檢測window.ie會將ie8誤認為ie7。余波隨著瀏覽器的快速發(fā)展,使用特性檢測變得越來越困難和不可靠。但是Mootools 1.2.4仍然使用這一方法,例如:getBoxObjectFor()。/from MooTools 1.2.4 var Browser = $merge( Engine: name: unknown, version: 0, Platform: name: (window.orientation != undefined) ? ipod : (navigator.platform.match(/mac|win|linux/i) | other)0.toLowerCase(), Features: xpath: !(document.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 游泳場館安全設(shè)施與應(yīng)急措施
- 音樂課程設(shè)計與孩子成長策略
- 營養(yǎng)調(diào)配在商業(yè)競爭中的重要性
- 深海探秘之旅醫(yī)學(xué)前沿的技術(shù)與成果
- 老年人居住環(huán)境的室內(nèi)裝飾藝術(shù)
- 2025年度物流倉儲安全管理與服務(wù)合同
- 家用智能家居與財務(wù)管理
- 2025年度羽毛球賽事賽事保險及意外傷害保障合同
- 2025年度文化產(chǎn)業(yè)園土地租賃服務(wù)合同
- 二零二五年度股權(quán)投資股權(quán)買賣及退出機制合同
- 2025年度院感管理工作計劃(后附表格版)
- 勵志課件-如何做好本職工作
- 2024年山東省濟南市中考英語試題卷(含答案解析)
- 2024年社區(qū)警務(wù)規(guī)范考試題庫
- 2025中考英語作文預(yù)測:19個熱點話題及范文
- 第10講 牛頓運動定律的綜合應(yīng)用(一)(講義)(解析版)-2025年高考物理一輪復(fù)習(xí)講練測(新教材新高考)
- 靜脈治療護理技術(shù)操作標(biāo)準(2023版)解讀 2
- 2024年全國各地中考試題分類匯編(一):現(xiàn)代文閱讀含答案
- 暑假作業(yè) 10 高二英語完形填空20篇(原卷版)-【暑假分層作業(yè)】2024年高二英語暑假培優(yōu)練(人教版2019)
- (新版)國民經(jīng)濟行業(yè)分類代碼表(八大行業(yè))
- 北京地鐵13號線
評論
0/150
提交評論