跳至內容

用戶代理

輕之舟百科,讓知識輕裝啟航
(重新導向自User-Agent)

User-Agent(中文常譯:用戶代理)是超文本傳輸協議(HTTP)中的一個請求頭欄位(Request Header Field),用於標識發起請求的客戶端軟體(通常稱為用戶代理,User Agent)的產品名稱、版本號、作業系統及平台等信息。該欄位由客戶端在每次HTTP請求中發送至伺服器,伺服器可據此識別客戶端類型,進而實現內容適配、錯誤排查或統計分析等功能。[1]

User-Agent
協議HTTP
類型請求頭欄位(Request Header)
標準RFC 9110
首次使用1993年(Mosaic瀏覽器)

早期瀏覽器

[編輯 | 編輯原始碼]

User-Agent 字符串的歷史可追溯至1993年,美國國家超級計算應用中心(NCSA)發布的 Mosaic 瀏覽器首次在請求中攜帶該欄位,其格式極為簡潔,通常形如 Mosaic/0.9,斜槓前為產品名稱,斜槓後為版本號。[2]

隨後,Netscape Communications 開發的 Netscape Navigator(內部代號 Mozilla,意為" Mosaic Killer ")延續了產品名加版本號的基本格式,並引入了語言、平台及加密類型等附加信息。Netscape Navigator 2 的 User-Agent 格式如下:

Mozilla/Version [Language] (Platform; Encryption)

其中,"Mozilla" 這一標識自此成為 User-Agent 字符串中最具歷史延續性的產品令牌(product token)。[2]

瀏覽器兼容性與偽裝

[編輯 | 編輯原始碼]

1996年,微軟發布 Internet Explorer 3。由於當時 Netscape Navigator 占據市場主導地位,大量伺服器通過檢測 User-Agent 中的 "Mozilla" 令牌來決定是否向客戶端發送包含 HTML 框架(frames)等高級特性的頁面。為確保兼容性,IE 3 的 User-Agent 字符串採用了如下格式:

Mozilla/2.0 (compatible; MSIE Version; Operating System)

此舉使 IE 在伺服器端檢測中被識別為 Mozilla 兼容瀏覽器,從而獲取完整頁面內容。這一"偽裝"行為打破了瀏覽器標識的原有慣例,並引發了後續連鎖反應。[2]

2003年,蘋果公司發布 Safari 瀏覽器,其採用 WebKit 渲染引擎(源自 KHTML)。為避免被伺服器誤識別或屏蔽,Safari 的 User-Agent 字符串同時包含了 Mozilla、KHTML、Gecko 及 Safari 等多個標識,形如:

Mozilla/5.0 (Platform; Encryption; OS-or-CPU; Language) AppleWebKit/AppleWebKitVersion (KHTML, like Gecko) Safari/SafariVersion

此後,Google Chrome 基於 WebKit(後轉為 Blink)發布,其 User-Agent 在 Safari 的基礎上進一步追加 Chrome 標識,形成了現代瀏覽器 User-Agent 字符串冗長而複雜的面貌。Opera 瀏覽器在早期曾堅持簡潔準確的自我標識格式 Opera/Version,但自第9版起也為兼容目的提供了偽裝為 Firefox 或 IE 的選項。[2][3]

格式與語法

[編輯 | 編輯原始碼]

根據 RFC 9110 的定義,User-Agent 欄位的語法結構如下:

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

其中,product 由產品名稱(token)與可選的產品版本(product-version)構成,二者以斜槓分隔;comment 則可包含附加說明信息。多個產品標識按重要性遞減順序排列。RFC 9110 建議發送方僅提供必要的產品識別信息,禁止在標識中嵌入廣告或其他非必要內容,並應避免生成過度冗長、細粒度的欄位值,以降低請求延遲及用戶被非自願識別(即"指紋識別",fingerprinting)的風險。[1]

User-Agent 字符串的主要用途包括:

  • 內容適配:伺服器根據客戶端瀏覽器類型、版本及作業系統,返回經過針對性優化的頁面或資源。
  • 兼容性處理:識別存在已知兼容性問題的客戶端版本,伺服器可據此調整響應內容或提供替代方案。
  • 統計分析:網站運營方通過分析 User-Agent 數據,了解訪客所使用的瀏覽器及作業系統分布。
  • 機器人識別:網絡爬蟲(crawler)及自動化工具通常會在 User-Agent 中聲明自身身份,以便伺服器區分人類用戶與機器流量。

隱私與安全

[編輯 | 編輯原始碼]

指紋識別

[編輯 | 編輯原始碼]

由於傳統 User-Agent 字符串通常包含瀏覽器名稱、完整版本號、作業系統、平台架構乃至設備型號等細粒度信息,這些數據可被伺服器用於構建用戶畫像,實現跨站追蹤。RFC 9110 明確指出,過度詳細的 User-Agent 欄位值會增加用戶被"指紋識別"的風險。[1]

User-Agent Client Hints

[編輯 | 編輯原始碼]

為緩解上述隱私風險,IETF 制定了 HTTP Client Hints 框架(RFC 8942),並在此基礎上發展出 User-Agent Client Hints(UA-CH)機制。[4] 該機制允許伺服器通過 Accept-CH 響應頭主動請求所需的客戶端信息,將原本被動暴露的 User-Agent 數據轉變為主動、可控的信息披露模式。[4]

Google Chrome 自2022年起逐步推進 User-Agent Reduction 計劃,凍結並簡化默認 User-Agent 字符串中的版本與平台信息(例如將 Chrome 版本號固定為 0.0.0),同時鼓勵開發者遷移至 User-Agent Client Hints API 獲取必要的客戶端詳情。[5] 這一舉措旨在減少被動指紋識別的攻擊面,同時通過顯式授權(opt-in)機制使客戶端和隱私研究人員能夠追蹤哪些站點正在收集此類數據。[4][5]

參考文獻

[編輯 | 編輯原始碼]