複製鏈接
請複製以下鏈接發送給好友

用户代理

鎖定
用户代理(User Agent,簡稱 UA),是一個特殊字符串頭,使得服務器能夠識別客户使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。
中文名
用户代理
外文名
User Agent
簡    稱
UA
釋    義
一個特殊字符串頭

用户代理User Agent的含義

一些網站常常通過判斷 UA 來給不同的操作系統、不同的瀏覽器發送不同的頁面,因此可能造成某些頁面無法在某個瀏覽器中正常顯示,但通過偽裝 UA 可以繞過檢測。
瀏覽器的 UA 字串
標準格式為: 瀏覽器標識 (操作系統標識; 加密等級標識; 瀏覽器語言) 渲染引擎標識 版本信息
瀏覽器標識
由於很多網站在進行 UA 檢測的時候忽略了兩位數版本號,所以可能造成瀏覽器及之後版本收到糟糕的頁面,因此自瀏覽器 10 之後的版本中瀏覽器標識項固定為瀏覽器,在 UA 字串尾部添加真實版本信息。
操作系統標識
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
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 98
加密等級標識
N: 表示無安全加密
I: 表示弱安全加密
U: 表示強安全加密
瀏覽器語言
在首選項 > 常規 > 語言中指定的語言
渲染引擎
瀏覽器 使用 Presto 渲染引擎,格式為: Presto/版本號
版本信息
顯示 瀏覽器 真實版本信息,格式為: Version/版本號

用户代理[譯]User-agent 字串史

在《特性檢測並非瀏覽器檢測》貼文中談到了 User-agent嗅探,有回貼支持本人繼續談下去。那本人認為:User-agent 嗅探是必備的一項重要的技術。要知道 user-agent 字串檢測不太精準的原因,必須談這些年來 user-agent 字串發生了怎樣的變化。
  • Mosaic, Netscape Navigator 1&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 字串的前半部分使用了產品名稱和產品版本,但在後面增加了一些信息。
Netscape 增加字段含義表
字段
含義
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, IE 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

GeckoFirefox 的呈現引擎。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.11
Mac 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/SafariVersion
Chrome 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.50
Mozilla/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

是指在網頁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