User Agent的含義,[譯]User-agent 字串史,較古的瀏覽器,Gecko,WebKit,Konqueror,Chrome,Opera,結論,Baiduspider的user-agent是什麼,
User Agent的含義
一些網站常常通過判斷 UA 來給不同的
作業系統、不同的
瀏覽器傳送不同的頁面,因此可能造成某些頁面無法在某個瀏覽器中正常顯示,但通過偽裝 UA 可以繞過檢測。
瀏覽器標識
由於很多網站在進行 UA 檢測的時候忽略了兩位數版本號,所以可能造成
瀏覽器及之後版本收到糟糕的頁面,因此自 瀏覽器 10 之後的版本中瀏覽器標識項固定為 瀏覽器,在 UA 字串尾部添加真實版本信息。
作業系統標識
FreeBSD
X11; FreeBSD (version no.) i386
X11; FreeBSD (version no.) AMD64
Linux
X11; Linux ppc
X11; Linux ppc64
X11; Linux i686
X11; Linux x86_64
Mac
Macintosh; PPC Mac OS X
Macintosh; Intel Mac OS X
Solaris
X11; SunOS i86pc
X11; SunOS sun4u
Windows:
Windows NT 10.0 對應
作業系統windows 10
windows NT 6.2 對應
作業系統 windows 8
Windows NT 6.1 對應
作業系統 windows 7
Windows NT 6.0 對應
作業系統 windows vista
Windows NT 5.2 對應
作業系統 windows 2003
Windows NT 5.1 對應
作業系統 windows xp
Windows NT 5.0 對應
作業系統 windows 2000
Windows ME
Windows 98
加密等級標識
N: 表示無安全加密
I: 表示弱安全加密
U: 表示強安全加密
瀏覽器語言
在首選項 > 常規 > 語言中指定的語言
渲染引擎
瀏覽器 使用 Presto 渲染引擎,格式為: Presto/版本號
版本信息
顯示
瀏覽器 真實版本信息,格式為: Version/版本號
[譯]User-agent 字串史
在《特性檢測並非瀏覽器檢測》貼文中談到了
User-agent嗅探,有回貼支持本人繼續談下去。那本人認為:
User-agent 嗅探是必備的一項重要的技術。要知道
user-agent 字串檢測不太精準的原因,必須談這些年來
user-agent 字串發生了怎樣的變化。
原作者的廣告時間:本貼文是從《JavaScript 高級程式設計(第2版)》中內容刪減而來,完整的內容請看本書。
較古的瀏覽器
1993年,NCSA 發布了首款 web
瀏覽器 Mosaic。它的
user-agent 字串非常簡潔:
Mosaic/0.9雖然當時由於它對
作業系統和平台的依賴性,但是基本格式還是很簡單明了。在
文本中,斜槓前面是產品名稱(可能會顯示為 NCSA Mosaic 或是其他類似的字),斜槓後面是產品版本號。
Netscape Communications 開發了 web
瀏覽器 Mozilla(當時號稱“Mosaic 殺手”)。他們首款公開發行版本: Netscape Navigator 2 的
user-agent 字串具有如下格式:
Mozilla/Version [Language] (Platform; Encryption)Netscape 按之前的做法在 user-agent 字串的前半部分使用了產品名稱和產品版本,但在後面增加了下列信息:
Language - 表示
應用程式用的是哪個語言 Platform - 表示應用程式是在什麼
作業系統和/或平台中運行 Encryption - 表示應用程式包含了什麼安全加密類型。其中的值可能是U(128位加密)、I(40位加密)、N(沒加密)。 Netscape Navigator 2 的
user-agent 字串的示例:
Mozilla/2.02 [fr] (WinNT; I)上面的字串指: Netscape Navigator 2.02 、法語 、Windows NT 、40位加密。在當時,通過
user-agent 字串中的產品名稱,可以正確判斷使用的是哪個 web 瀏覽器。Netscape Navigator 3 、Internet Explorer 3 1996年,Netscape Navigator 3 發布,它遠遠超過 Mosaic 成為當時最流行的 web 瀏覽器。而
user-agent 字串只有些小的變化:去掉了語言部分,多了個放
作業系統或CPU的可選信息。格式如下:
Mozilla/Version (Platform; Encryption [; OS-or-CPU description])在 Windows 系統中 Netscape Navigator 3 的 user-agent 字串的示例:
Mozilla/3.0 (Win95; U)上面的字串指:Netscape Navigator 3 、Windows 95 、128 位加密。在 Windows 系統中,字串裡面不會顯示 OS 或 CPU 的信息。
Netscape Navigator 3 發布不久,
微軟公布了它的首款 web
瀏覽器: IE 3 ¹,但是 Netscape 是當時首選瀏覽器,大多數伺服器在載入頁面前都會檢查 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)由於當時的
瀏覽器嗅探只查
user-agent 字串中的產品名稱部分,結果 IE 搖身一變被識別成了 Mozilla,偽裝成 Netscape Navigator。這個做法引發了對
瀏覽器識別的爭論。從此以後,
瀏覽器真正的版本埋沒在了字串的中間。Netscape Communicator 4 、Internet Explorer 4至8 1997年8月,Netscape Communicator 4 發布(發布的名稱中 Navigator 換成了 Communicator),它的
user-agent 字串格式與 3 版本一致。Windows 98 中 4 版本的
user-agent 字串如下:
Mozilla/4.0 (Win98; I)Netscape
瀏覽器在更新時,版本也相應增加。4.79 版本的
user-agent 字串如下:
Mozilla/4.79 (Win98; I)
微軟發布 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 馬上就發布了(只在 Mac 平台),雖然 Mozilla 版本仍是 4,但是 IE 的版本改成如下:
Mozilla/4.0 (compatible; MSIE 4.5; Mac_PowerPC)此後,IE 的版本一直到 7 都沿用了這個模式。
而 IE 8 的 user-agent 字串添加了呈現引擎(rendering engine)版本:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)新增的呈現引擎非常重要!這樣 IE8 以 MSIE 7.0 兼容模式運行時,Trident 版本保持不變,而原先 IE7 的 user-agent 字串不包括 Trident 版本。這樣可以區分 IE7 與 IE8 運行的兼容模式。
注意:別指望能從 Mozilla 版本中得到什麼靠譜的信息。
Gecko
Gecko 是 Firefox 的呈現引擎。Gecko 首次開發是作為 Mozilla
瀏覽器 Netscape 6 的一部分。Netscape 6 的
user-agent 字串的結構是面向未來的,新版本反應出從 4.x 版本的簡單變得較為複雜,它的格式如下:
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 2.0.0.11 :
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11Mac OS X 中的 Camino 1.5.1:
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en; rv:1.8.1.6) Gecko/20070809 Camino/1.5.1上面都是基於 Gecko 的
瀏覽器所取得的
user-agent 字串,區別只是版本有所不同。Mozilla 版本 5.0 是自從首款基於 Gecko 發布後就一直不變,而且以後有可能也不會變²。
WebKit
2003年,Apple 宣布發布首款他們自主開發的 web
瀏覽器:Safari。它的呈現引擎叫 WebKit。它是 Linux 中的 web
瀏覽器 Konqueror 呈現引擎 KHTML 的一個分支,幾年後,WebKit 的開源吸引了呈現引擎的開發人員。
這款新
瀏覽器和呈現引擎的開發人員也遇到了曾經 IE 3.0 類似的問題:怎樣才能溶入主流而不被踢出局?答案是:在
user-agent 字串中放詳盡的信息,以便騙取網站的信任使它與其它流行的瀏覽器兼容。
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 的版本是
瀏覽器的構建版本號(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 預覽版本中就有了,這字串部分是最耐人尋味又飽受詬病。Apple 的野心是為了讓開發人員把 Safari 當成 Gecko,所以採取了當初
微軟 IE
user-agent 的類似做法:Safari 是兼容 Mozilla 的,否則 Safari 用戶會認為用的
瀏覽器不受支持。
而其它基於 WebKit 的
瀏覽器與 Safari 不同的是,沒有上面說的這個情況,所以檢測斷定瀏覽器是否基於 WebKit 比看有沒有明確標 Safari 更有用。
Konqueror
Konqueror 是款在 KDE Linux
桌面環境中的
瀏覽器,基於 KHTML 開源呈現引擎。它只發布了在 Linux 的版本,但是擁有活躍的用戶群。為了
兼容性最大化,
user-agent 字串的格式也緊跟 IE 的後塵:
Mozilla/5.0 (compatible; Konqueror/Version; OS-or-CPU)Konqueror 3.2 為了與 WebKit user-agent 字串變化保持一致,它將 KHTML 作為它的標識:
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 的版本號比較一致,唯一的區別就是下點處不同,比如Konquerer 3.5、KHTML 3.5.1。
Chrome
Google Chrome
瀏覽器以 WebKit 作為呈現引擎,JavaScript 引擎卻用了另一種。最初發布的版本是 0.2,它的
user-agent 字串格式是在 webKit 信息的基礎上又增加了如下:
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/0.2.149.29 Safari/525.13雖我不敢完全保證,但很可能 WebKit 版本和 Safari 版本總會保持同步。
Opera
Opera
瀏覽器默認
user-agent 字串是
現代瀏覽器中最合理的--正確的標識了它自己及其版本。 在 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) [en]Opera 8 user-agent 字串的語言部分移到了括弧內。
Opera/Version (OS-or-CPU; Encryption; Language)在 Windows XP 中 Opera 8 user-agent 字串示例:
Opera/8.0 (Windows NT 5.1; U; en)當時 Opera 做為主流
瀏覽器之一,它的
user-agent 字串是唯一使用產品名稱和版本完全真實的標識了它自己。但是由於大量的
瀏覽器嗅探代碼在 Internet 上像蝗蟲飛過般只吃標 Mozilla 產品名的
user-agent 字串,造成了 Opera 的
user-agent 字串發生了完全的改變。
Opera 9 user-agent 字串有兩種修改的方式:一種方式是將自己標識為 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 標識為 Firefox 2。後一字串將 Opera 9.5 標識為 IE 6,在兩個字串中都帶有 Opera 版本信息。雖然這種方式是作為 Firefox 或 IE 打開的,但也能識別出 Opera。另一種方法則是
瀏覽器 user-agent 字串標識偽裝成 Firefox 或 IE,同時也找不到“Opera”字串及其版本信息。這樣從字面上去區分 Opera
瀏覽器便成了“不可能完成的任務”。
結論
user-agent 字串史可以說明曾對
user-agent 嗅探說不的原因:IE 想要將自己識別為 Netscape 4,Konqueror 和 WebKit 想要識別為 Firefox,Chrome 想要識別為 Safari。這樣使得除 Opera 外所有
瀏覽器的
user-agent 嗅探區別很小,想要從一堆茫茫瀏覽器海洋中找出有用的標識太少了。關於
嗅探要記住:一款
瀏覽器與其它瀏覽器是兼容的,這樣造成了不能完全準確的斷定是哪款瀏覽器。
比如說 Chrome ,它聲稱任何可以在 Safari 3 訪問的網站 Chrome 也都可以訪問,但是對檢測 Chrome 沒有一點用。為了
瀏覽器的兼容--這便是這個聲明的理由。
(完)
譯註1:IE 3 不是
微軟首款
瀏覽器,請參考 wiki 的 Timeline of web browsers。
譯註2:這個是原作者的想法,譯者不敢保證。
譯註3:Opera 10 的 user-agent 字串大家自己去看吧。
Baiduspider的user-agent是什麼
是指在網頁robots.txt檔案里表示針對
百度蜘蛛 禁止其訪問及收錄的內容
百度各個產品使用不同的user-agent:
產品名稱 | 對應user-agent |
---|
無線搜尋 | Baiduspider |
圖片搜尋 | Baiduspider-image |
視頻搜尋 | Baiduspider-video |
新聞搜尋 | Baiduspider-news |
百度搜藏 | Baiduspider-favo |
百度聯盟 | Baiduspider-cpro |
商務搜尋 | Baiduspider-ads |
網頁以及其他搜尋 | Baiduspider |
例如:
User-agent: Baiduspider
Disallow: /close.asp
Disallow: /application.asp
Disallow: /mdb/info.asp
Disallow: /404.htm