什麼是使用者代理程式縮減?

縮減使用者代理程式 (UA) 可盡量減少 UA 字串分享的識別資訊,以免遭人用於被動式數位指紋採集。這些變更現已正式發布,所有資源要求都會減少 User-Agent 標頭。因此,特定 Navigator 介面的傳回值會減少,包括:navigator.userAgentnavigator.appVersionnavigator.platform

網頁開發人員應檢查網站代碼,確認是否使用 User-Agent 字串。如果網站會剖析 User-Agent 字串,以讀取裝置型號、平台版本或完整瀏覽器版本,您就必須導入 User-Agent Client Hints API

使用者代理程式用戶端提示 (UA-CH)

User-Agent 用戶端提示可存取完整的 User-Agent 資料集,但前提是伺服器主動聲明需要特定資料片段。

移除被動公開的使用者資料後,我們就能更準確地評估並減少要求標頭、JavaScript API 和其他機制主動公開的資訊量。

為什麼需要減少 UA 和 UA-CH?

過去,使用者代理程式字串會在每次 HTTP 要求中,廣播大量有關使用者瀏覽器、作業系統和版本的資料字串。這會造成兩項問題:

  • 詳細資料的精細程度和豐富程度可能會導致使用者身分識別。
  • 這項資訊預設為可用,可能導致隱形追蹤。

減少 UA 和 UA-CH 資訊後,系統預設只會分享基本資訊,有助於提升使用者隱私權。

縮減後的 User-Agent 包含瀏覽器品牌和重要版本、要求來源 (電腦或行動裝置) 和平台。如要存取更多資料,您可以使用使用者代理程式用戶端提示,要求取得使用者裝置或情況的特定資訊。

此外,隨著時間推移,User-Agent 字串變得越來越長且複雜,導致字串剖析容易出錯。UA-CH 提供結構化且可靠的資料,方便您解讀。剖析 UA 字串的現有程式碼不會中斷 (但傳回的資料會較少),如果網站需要特定用戶端資訊,您就必須遷移至 UA-CH。

縮減版 UA 和 UA-CH 的運作方式為何?

以下簡要說明縮減的使用者代理程式字串和 UA-CH 的運作方式。 如需更深入的範例,請參閱「使用使用者代理程式用戶端提示改善使用者隱私權和開發人員體驗」。

使用者開啟瀏覽器,並在網址列中輸入 example.com

  1. 瀏覽器會傳送載入網頁的要求。

    1. 瀏覽器會包含 User-Agent 標頭,其中含有縮減的使用者代理程式字串。例如:User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36
    2. 瀏覽器會在預設的 User-Agent 用戶端提示標頭中加入相同資訊。例如:

      Sec-CH-UA: "Chrome"; v="98"
      Sec-CH-UA-Mobile: ?1
      Sec-CH-UA-Platform: "Android"
      
  2. 伺服器可以透過 Accept-CH 回應標頭,要求瀏覽器傳送額外的用戶端提示,例如裝置型號。例如:Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model

  3. 瀏覽器會套用政策和使用者設定,判斷後續要求標頭中允許傳回伺服器的資料。例如:

    Sec-CH-UA: "Chrome"; v="93"
    Sec-CH-UA-Mobile: ?1
    Sec-CH-UA-Platform: "Android"
    Sec-CH-UA-Model: "Pixel 2"
    

重要用戶端提示

如要在初始要求中加入特定用戶端提示組合,可以使用 Critical-CH 回應標頭。Critical-CH 值必須是 Accept-CH 要求的值的子集。

舉例來說,初始要求可能包含 Device-MemoryViewport-Width 的要求,其中 Device-Memory 視為重要要求。

GET / HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Device-Memory, Viewport-Width
Vary: Device-Memory, Viewport-Width
Critical-CH: Device-Memory

如果瀏覽器需要重要提示 (Critical-CH) 才能正確算繪網頁,伺服器可以使用 Accept-CH 標頭要求提供這項額外資訊。然後,瀏覽器可以傳送網頁的新要求,包括重要提示。

總而言之,Accept-CH 會要求網頁的所有值,而 Critical-CH 只會要求必須在載入時取得的值子集,才能正確載入網頁。詳情請參閱用戶端提示可靠性規格

使用 UA-CH API 偵測平板電腦裝置

隨著行動裝置、平板電腦和電腦裝置之間的界線越來越模糊,動態板型規格也越來越常見 (折疊式螢幕、在筆電和平板電腦模式之間切換),建議使用回應式設計和功能偵測,呈現合適的使用者介面。

不過,瀏覽器為使用者代理程式字串和使用者代理程式用戶端提示提供的資訊來自相同來源,因此應適用相同的邏輯形式。

舉例來說,如果系統在 UA 字串中檢查到這個模式:

  • 手機解鎖圖案:'Android' + 'Chrome/[.0-9]* Mobile'
  • 平板電腦模式:'Android' + 'Chrome/[.0-9]* (?!Mobile)'

系統可能會檢查相符的預設 UA-CH 標頭介面:

  • 手機型號:Sec-CH-UA-Platform: "Android"Sec-CH-UA-Mobile: ?1
  • 平板電腦圖案:Sec-CH-UA-Platform: "Android"Sec-CH-UA-Mobile: ?0

或是對應的 JavaScript 介面:

  • 手機解鎖圖案:navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === true
  • 平板電腦模式:navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false

如要瞭解特定硬體用途,可以透過高熵 Sec-CH-UA-Model 提示要求裝置型號名稱。

如何使用及測試減少的 UA?

首先,請檢查網站程式碼,找出 User-Agent 字串的例項和用途。如果網站需要剖析 User-Agent 字串,才能讀取裝置型號、平台版本或完整瀏覽器版本,請導入 UA-CH API

更新為 UA-CH API 後,請進行測試,確保您從 User-Agent 取得的資料符合預期。測試方式有三種,複雜程度各不相同。

使用者代理程式縮減功能全面推出後,所有 Chrome 裝置都會提供完全縮減的 UA 字串。2022 年第 2 季發布的 Chrome 次要版本開始減少支援。

在本機測試自訂字串

如要使用自訂 User-Agent 字串測試網站,模擬不同裝置,請使用 --user-agent="Custom string here" 指令列標記啟動 Chrome。如要進一步瞭解指令列旗標,請參閱這篇文章

或者,您也可以使用 Chrome 開發人員工具中的裝置模擬器。

轉換網站程式碼中的字串

如果您在用戶端或伺服器端程式碼中處理現有的 Chrome user-agent 字串,可以將該字串轉換為新格式,測試相容性。您可以覆寫並取代字串,也可以產生新版本並並列測試。

支援用戶端提示和重要提示

系統會傳回三項預設用戶端提示給伺服器,包括瀏覽器名稱和主要版本、指出瀏覽器是否位於行動裝置上的布林值,以及作業系統名稱。這些訊息是在傳輸層安全標準 (TLS) 通訊協定握手作業後傳送。這些功能已在瀏覽器中提供並支援。

不過,有時候您可能需要擷取重要資訊,才能算繪網站。

最佳化重要提示

TLS 握手是建立瀏覽器與網頁伺服器之間安全連線的第一步。如果沒有介入,Critical-CH 回應標頭的設計目的是在第一次傳送要求時沒有重要提示,就立即指示瀏覽器重試要求。

包含重要提示的 Client Hints 序號圖。
伺服器要求重要提示時,用戶端會重試傳送網頁的第一個要求,並附上重要提示。在本例中,系統會要求 Sec-CH-UA-Model 的提示兩次:一次是透過 Accept-CH 做為用戶端提示,另一次是透過 Critical-CH 做為重要提示。

如要最佳化重要提示 (Critical-CH 標頭),您必須攔截這個信號交換,並提供用戶端提示模型。這些步驟可能很複雜,需要具備進階知識。

ACCEPT_CH HTTP/2 和 HTTP/3 框架搭配 TLS ALPS 擴充功能,可進行連線層級最佳化,及時傳送伺服器的用戶端提示偏好設定,以供第一個 HTTP 要求使用。這類資訊需要複雜的設定,建議只用於真正重要的資訊。

BoringSSL (OpenSSL 的分支版本) 可協助您在 Chromium 中使用 Google 的實驗性功能。目前 ALPS 僅在 BoringSSL 中實作

如需使用重要提示,請參閱重要提示可靠性和最佳化指南。

常見問題

透過 Accept-CH 標頭指定的提示會傳送多久?

透過 Accept-CH 標頭指定的提示,會在瀏覽器工作階段期間傳送,或直到指定另一組提示為止。

UA-CH 是否支援 HTTP/2 和 HTTP/3?

UA-CH 適用於 HTTP/2 和 HTTP/3 連線。

子網域 (和 CNAME) 是否需要頂層頁面 Permissions-Policy,才能存取高熵 UA-CH?

無論 DNS 端如何定義來源,系統都會限制跨來源要求中的高熵 UA-CH 要求標頭。對於任何跨源子資源,委派作業都必須透過 Permissions-Policy 處理,或透過在跨源環境中執行的 JavaScript 取得。

縮減使用者代理程式會對機器人偵測造成什麼影響?

Chrome 變更使用者代理程式字串,不會直接影響機器人選擇傳送的使用者代理程式字串。

機器人可能會選擇更新自己的字串,以反映 Chrome 傳送的資訊減少,但這完全是機器人的實作選擇。Chrome 仍會傳送相同的使用者代理程式格式,且在 Chrome 使用者代理程式字串結尾附加自身 ID 的機器人,仍可繼續這麼做。

如果對特定機器人有任何疑慮,建議直接與擁有者聯絡,詢問他們是否打算變更 User-Agent 字串。

參與討論及分享意見

瞭解詳情