使用者代理

代表用戶行事的軟件

使用者代理(英語:user agent)在電腦科學中指的是代表使用者行為的程式(軟件代理程式英語Software agent)。例如,網頁瀏覽器就是一個「幫助使用者取得、渲染網頁內容並與之互動」的使用者代理;電子郵件閱讀器也可以稱作郵件代理。而在對談發起協定(SIP)中,使用者代理指代的是一個通訊對談的所有兩個終端[1]

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

使用者代理辨識

編輯

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

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

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

可能私隱問題

編輯

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

格式

編輯

根據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。「最重要的」產品組件被最先列出。這個字串的部分如下所示:

字串 說明
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

這個字串的組成如下:

字串 說明
Mozilla/5.0 Mozilla/5.0 是一個通用標記符號,用來表示與 Mozilla 相容,這幾乎是現代網頁瀏覽器的標配。[4]
(iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) 瀏覽器所執行的系統的詳細資訊(iPad,類似 Mac OS X,使用美式英語)
AppleWebKit/531.21.10 瀏覽器所使用的平台(平台為Webkit瀏覽器引擎)
(KHTML, like Gecko) 瀏覽器平台的細節(使用 KHTML渲染引擎,一種類似Gecko的渲染引擎)
Mobile/7B405 被瀏覽器用於指示特定的直接由瀏覽器提供或者通過第三方提供的可用的增強功能。這方面的一個實例是Microsoft Live Meeting,它註冊了一個擴充以使Live Meeting服務知道該軟件是否已經安裝上,這意味着它可以為加入會議提供一個簡化的體驗。

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

編輯

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

最早出現的網頁瀏覽器是伊利諾伊大學國家超級計算中心(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.5Google開發的基於Webkit的產品ChromeChromium及衍生的渲染引擎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.51Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51Opera/9.60 (Windows NT 6.0; U; en) Presto/2.1.1,並且允許使用者選擇使用的使用者代理字串。Opera在放棄使用Presto而改用Blink後,相容性的使用者代理字串則跟隨KHTML系列的寫法。

使用者代理欺騙

編輯

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

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

垃圾郵件機械人網絡爬蟲經常使用假的使用者代理。

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

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

使用者代理嗅探

編輯

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

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

加密強度表示法

編輯

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

參見

編輯

參考

編輯
  1. ^ RFC 3261, SIP: Session Initiation Protocol, IETF, The Internet Society (2002)
  2. ^ Netnews Article Format. IETF. November 2009: sec. 3.2.13. RFC 5536. 
  3. ^ Peter Eckersley. "Browser Versions Carry 10.5 Bits of Identifying Information on Average頁面存檔備份,存於互聯網檔案館)", Electronic Frontier Foundation, 27 January 2010. Retrieved 25 August 2011.
  4. ^ User-Agent. Mozilla 開發者網絡. [2018-01-09]. (原始內容存檔於2021-04-23) (中文(中國大陸)). 
  5. ^ Burstein complaining "... I've been rejected until I come back with Netscape". [2012-05-04]. (原始內容存檔於2018-09-08). 
  6. ^ 存档副本. [2011-08-09]. (原始內容存檔於2011-08-06). 
  7. ^ "Viewable with Any Browser" campaign. [2012-05-04]. (原始內容存檔於2018-09-08). 
  8. ^ 乐视浏览器有意更改UA被判构成不正当竞争. 人民網. 中國知識產權報. [2017-10-17]. (原始內容存檔於2017-10-17). 
  9. ^ Pemberton, Stephen. W3C Markup Validation Service. W3C. [2011-10-18]. (原始內容存檔於2022-01-05). 
  10. ^ Clary, Bob. Browser Detection and Cross Browser Support. Mozilla Developer Center. Mozilla. 10 February 2003 [2009-05-30]. (原始內容存檔於2011-11-17). 
  11. ^ Zawinski, Jamie. user-agent strings (obsolete). mozilla.org. 1998-03-28 [2010-01-08]. (原始內容存檔於2011-10-04). 

外部連結

編輯