用户代理

**使用者代理**（英語：user agent）在電腦科學中指的是代表使用者行為的程式（軟體代理程式）。例如，網頁瀏覽器就是一個「幫助使用者取得、彩現網頁內容並與之互動」的使用者代理；電子郵件閱讀器也可以稱作郵件代理。而在對談發起協定（SIP）中，使用者代理指代的是一個通信對談的所有兩個終端。

在很多場合，使用者代理作為一個主從式架構的分散式計算系統中的通信所用網路傳輸協定的客戶端而行為。特別是在超文字傳輸協定中指定要求發起請求的客戶端軟體要使用一個「User-Agent」請求表頭，即使在客戶端不由使用者操縱的時候。SIP 協定（基於 HTTP）沿用了這一用法。

## 使用者代理辨識

當一個軟體在一個網路協定進行操作時，它通常向它的 operating peer 提交一個特定的字串來標示自己，該字串通常包含了其應用程式類型、作業系統、軟體供應商…… 等等，有時還會包含軟體修訂版本等資訊。在 HTTP、SIP 以及 SMTP/NNTP 協定中，這個辨識是通過 _user-agent_ 的頭欄位傳送的。 
網路機器人，例如網路抓取工具，通常也會在使用者代理的字串中包含 bot 的操縱者的連絡資訊，例如一個 URL 或一個電子郵件位址，以便網站管理員可以用來連絡操縱者。

在 HTTP 中，User-Agent 字串通常被用於內容協商，而原始伺服器為該回應選擇適當的內容或操作參數。例如，User-Agent 字串可能被網路伺服器用以基於特定版本的客戶端軟體的已知功能選擇適當的變體。

通過使用 robots.txt 檔案的可以設定網路抓取工具對網站的部分存取與否，而其設定標準之一就是使用者代理字串。換句話說，藉由 robots.txt 檔案的設定，可以讓網站不能被特定的瀏覽器存取。

### 可能隱私問題

與許多其它 HTTP 請求檔頭一樣，在 User-Agent 字串內的資訊構成了客戶端傳送給伺服器的資訊的一部分，由於該字串可以因使用者不同而有很大程度的差異。

### 格式

根據 Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. （頁面存檔備份，存於網際網路檔案館）第 5.5.3 章和 Hypertext Transfer Protocol -- HTTP/1.1 （頁面存檔備份，存於網際網路檔案館）第 14.43 章，使用者代理的格式如下：

* User-Agent = product \*( RWS ( product / comment ) )

例如你的產品叫做 WikiBrowser，你的使用者代理字串就可能是 WikiBrowser/1.0 Gecko/1.0。「最重要的」產品組件被最先列出。這個字串的部分如下所示：

但不幸的是，在瀏覽器大戰期間，很多網路伺服器的組態只給被辨識為某些版本的 Mozilla 的客戶端傳送需要進階功能的網頁。

因此，為取得更好的網頁，絕大多數網頁瀏覽器使用的 User-Agent 值如下：

* Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]。

例如，iPad 上的 Safari 使用的就是下述：

> 
> Mozilla/5.0 (iPad; U; CPU OS 3\_2\_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405
> 
> 

這個字串的組成如下：

### 網頁瀏覽器使用者代理字串的演變歷史

現時網頁瀏覽器使用者代理字串的複雜性，源於網頁瀏覽器歷代更新和競爭下的結果：

最早出現的網頁瀏覽器是伊利諾伊大學國家超級計算中心（NCSA）的 Mosaic，使用的使用者代理字串類似為：`NCSA_Mosaic/2.0 (Windows 3.1)` 。

之後網景通訊公司招募了 Mosaic 的主要開發人員，開發出一個網頁瀏覽器以挑戰取代 Mosaic，其開發代號為 Moziila，意為「Mosaic 殺手（Mosaic Killa）」，由於避免與 Mosaic 產生著作權糾紛，最終產品名為 Netscape Navigator（網景領航員），使用的使用者代理字串類似為：`**Mozilla**/1.0 (Win3.1)`。而且網景領航員引入了大量新的先進 HTML 語言特性，包括框架（frame），當時的網頁伺服器已經使用使用者代理嗅探機制，使用者代理字串包含「`Mozilla`」的會提供更先進的頁面。

之後微軟也開發出 Internet Explorer 意圖挑戰取代 Netscape Navigator，同樣實現了 Netscape Navigator 所擁有的先進特性，但由於伺服器的使用者代理嗅探機制，為了儘快跟隨對手，所以使用了包含「`Mozilla`」的使用者代理字串，類似為：`**Mozilla**/1.22 (compatible; **MSIE** 2.0; Windows 95)`，同樣獲得伺服器提供先進的頁面。最終在第一次瀏覽器大戰中，Netscape Navigator 的領先地位被 Internet Explorer 取代。

之後網景將 Netscape Navigator 開源化，誕生出 Mozilla 組織，開發出新的開源瀏覽器彩現引擎 Gecko 及對應的瀏覽器產品 Mozilla FireFox，以在第二次瀏覽器大戰中挑戰 Internet Explorer 的地位，使用的使用者代理字串類似於：`**Mozilla**/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) **Gecko**/20020826`。與此同時，源於 Linux 的開發軟體專案 KDE 開發出 Konqueror 以及其瀏覽器彩現引擎 KHTML，為了能通過使用者代理嗅探（包含「`Gecko`」的則提供相應的先進頁面特性），使用了跟隨 Mozilla 和 Gecko 的使用者代理字串，類似為：`**Mozilla**/5.0 (compatible; Konqueror/3.2; FreeBSD) (**KHTML**, like **Gecko**)`。之後基於 KHTML 衍生的網頁瀏覽器都跟隨 KHTML 使用者代理字串的基礎上附加自己的獨特資訊，以保證伺服器通過使用者代理嗅探提供獲得對應彩現引擎所實現的先進頁面特性，例如蘋果公司開發的源於 KHTML 的彩現引擎 Webkit 及產品 Safari，使用的是：`**Mozilla**/5.0 (Macintosh; U; PPC Mac OS X; de-de) **AppleWebKit**/85.7 (**KHTML**, like **Gecko**) **Safari**/85.5`；Google 開發的基於 Webkit 的產品 Chrome 和 Chromium 及衍生的彩現引擎 Blink，使用的是：`**Mozilla**/5.0 (Windows; U; Windows NT 5.1; en-US) **AppleWebKit**/525.13 (**KHTML**, like **Gecko**) **Chrome**/0.2.149.27 **Safari**/525.13`。

特例的是，Opera 同時使用標識相容於多個彩現引擎（或網頁瀏覽器）和自己獨有彩現引擎 Presto 的使用者代理字串，類似於： `**Mozilla**/4.0 (compatible; **MSIE** 6.0; Windows NT 5.1; en) **Opera** 9.51`、`**Mozilla**/5.0 (Windows NT 6.0; U; en; rv:1.8.1) **Gecko**/20061208 **Firefox**/2.0.0 **Opera** 9.51`、`**Opera**/9.60 (Windows NT 6.0; U; en) **Presto**/2.1.1`，並且允許使用者選擇使用的使用者代理字串。Opera 在放棄使用 Presto 而改用 Blink 後，相容性的使用者代理字串則跟隨 KHTML 系列的寫法。

## 使用者代理欺騙

各種網頁瀏覽器的流行程度在整個 Web 的歷史上一直在變化，而且有些網站不是根據全球資訊網協會（W3C）或者網際網路工程任務組（IETF）所制定的統一標準的方式設計，而是設計只能在特定瀏覽器下顯示。網站通常探測瀏覽器版本的代碼，根據使用者代理調整其頁面設計。換句話說，在流行程度不高的瀏覽器上，即使它們可能有能力處理它，不會收到較複雜的內容，更甚者，在極端情況下，拒絕全部內容。因此，有很多瀏覽器有偽裝或欺騙其標識字串的功能，讓伺服器發送不同的內容。例如，Android 上的瀏覽器辨識自己為 Safari 以增加相容性。

其它 HTTP 客戶端程式，如下載管理器和離線網頁瀏覽器，通常有能力更改使用者代理字串。

垃圾郵件機器人和網路爬蟲經常使用假的使用者代理。

在網頁設計師中流行「任何瀏覽器可見」，鼓勵開發者設計網頁時，能讓網頁在任何瀏覽器都能有一樣好的瀏覽結果。

使用者代理欺騙的結果之一是可能令收集到的網頁瀏覽器的使用分布不準確。需要注意，使用者代理欺騙可能違反某些法律法規、損害他人利益。

## 使用者代理嗅探

**使用者代理嗅探**（User Agent sniffing）指的是網站在特定使用者代理下檢視時展示不同內容的技術。在網際網路上，這將導致在特定瀏覽器下瀏覽某些網頁時顯示的是截然不同的站點。這方面一個有用的例子是 Microsoft Exchange Server 2003 的 Outlook Web Access 功能。當在 Internet Explorer 6（或更新版本）檢視時，比起在任何更舊瀏覽器中的相同頁面，會有更多功能被顯示，因為舊的瀏覽器無法彩現相同內容。使用者代理嗅探大多被認為是不好的做法，因為它鼓勵瀏覽器特定的設計而且由於無法辨識的使用者代理標識而懲罰新的瀏覽器。相反，W3C 推薦建立標準的 HTML 標記，允許在儘可能多的瀏覽器下正確的彩現，且測試特定的瀏覽器特性而不是特定瀏覽器版本或品牌。

專門針對手機的 Web 站點，如 NTT DOCOMO 的 i-mode 或者沃達豐的 Vodafone live!入口網站，通常嚴重依賴於使用者代理嗅探，由於行動瀏覽器通常相互之間差異巨大。在最近幾年中，在移動瀏覽領域已作出了很多發展，然而很多並不擁有這些新技術的舊的手機仍然在被廣泛使用。所以，手機入口網站經常依賴用以瀏覽它們的手機種類而產生而產生截然不同的標記代碼。這些差異可以很小，如，調整某些圖像的大小以適應更小的螢幕，或者相當大，如，以 WML 彩現網頁而不是 XHTML。

## 加密強度表示法

在美國建立的網頁瀏覽器，如 Netscape Navigator 和 Internet Explorer，在使用者代理字串中使用字母 U, I 和 N 以指定加密強度。直至 1996 年，美國政府允許了通過長於 40 位金鑰的加密被出口為止，供應商推出不同瀏覽器版本，各自具有不同加密強度。「U」代表美國（為具有 128 - 位加密的版本）；「I」代表國際 — 瀏覽器具有 40 - 位加密且可以在全世界任何地方被使用 — 而「N」代表（事實上）「沒有」（沒有加密）。隨著出口限制的解除，絕大多數供應商支援了 256 - 位加密。

## 參見

* robots.txt
* 網路爬蟲
* WURFL
* UAProf
* Apache Mobile Filter
* 瀏覽器嗅探

## 參考

## 外部連結

* What's My User Agent?（檢視您的使用者代理） （頁面存檔備份，存於網際網路檔案館）
* View My User Agent
* 使用者代理字串的歷史 （頁面存檔備份，存於網際網路檔案館）
* 瀏覽器野史 UserAgent 列傳 （頁面存檔備份，存於網際網路檔案館）（簡體中文）
* 譯文：User-agent 的歷史 （頁面存檔備份，存於網際網路檔案館）（簡體中文）