用戶代理(user-agent)

用戶代理

user-agent一般指本詞條

User Agent中文名為用戶代理,簡稱 UA,它是一個特殊字元串頭,使得伺服器能夠識別客戶使用的作業系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器外掛程式等。

基本介紹

  • 中文名:用戶代理
  • 外文名:User Agent
  • 簡稱:UA
  • 釋義:一個特殊字元串頭
User Agent的含義,[譯]User-agent 字串史,較古的瀏覽器,Gecko,WebKit,Konqueror,Chrome,Opera,結論,Baiduspider的user-agent是什麼,

User Agent的含義

一些網站常常通過判斷 UA 來給不同的作業系統、不同的瀏覽器傳送不同的頁面,因此可能造成某些頁面無法在某個瀏覽器中正常顯示,但通過偽裝 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檔案里表示針對百度蜘蛛 禁止其訪問及收錄的內容
Baiduspider的user-agent是什麼?
百度各個產品使用不同的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

相關詞條

熱門詞條

聯絡我們