用戶代理

用戶代理（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. date=20210422024025 第5.5.3章和 Hypertext Transfer Protocol -- HTTP/1.1 date=20110307142107 第14.43章，用戶代理的格式如下：
例如你的產品叫做WikiBrowser，你的用戶代理字符串就可能是WikiBrowser/1.0 Gecko/1.0。「最重要的」產品組件被最先列出。這個字符串的部分如下所示：
但不幸的是，在瀏覽器大戰期間，很多網絡服務器的配置只給被識別為某些版本的Mozilla的客戶端發送需要高級功能的網頁。
因此，為獲取更好的網頁，絕大多數網頁瀏覽器使用的User-Agent值如下：- codespan|Mozilla/version (system and browser information) platform (platform details) extensions。
例如，iPad上的Safari使用的就是下述：
這個字符串的組成如下：

**網頁瀏覽器用戶代理字符串的演變歷史**
現時網頁瀏覽器用戶代理字符串的複雜性，源於網頁瀏覽器歷代更新和競爭下的結果：
最早出現的網頁瀏覽器是伊利諾伊大學國家超級計算中心（NCSA）的Mosaic，使用的用戶代理字符串類似為：NCSA_Mosaic/2.0 (Windows 3.1) 。
網景通訊公司招募了Mosaic的主要開發人員，開發出新的網頁瀏覽器以挑戰取代Mosaic，其開發代號為Mozilla，意為“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?（檢視您的用戶代理） date=20170212164154 -  View My User Agent-  用戶代理字符串的歷史 date=20221125225331 -  瀏覽器野史 UserAgent列傳 date=20190722194430 -  譯文：User-agent的歷史 date=20190724131002