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

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

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

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

User-Agent Client Hints 能存取整套使用者代理程式資料,但前提是伺服器主動宣告特定資料有明確需求。

透過移除被動公開的使用者資料,我們就能更有效地測量並減少要求標頭、JavaScript API 和其他機制刻意公開的資訊量。

為什麼需要減少通用 Analytics (分析) 和通用 Analytics (分析)-CH?

以往,User-Agent 字串會針對每個 HTTP 要求,播送大量與使用者瀏覽器、作業系統和版本相關的資料。這種問題的原因有兩個:

  • 只要精細度和豐富細節,就能辨識出使用者身分。
  • 如果預設提供這項資訊,可能會導致隱密追蹤。

預設只分享基本資訊,降低通用 Analytics (分析) 和 UA-CH 帶來的使用者隱私。

縮小的使用者代理程式包含瀏覽器的品牌和版本的重要版本 (電腦或行動裝置),以及平台。如要存取更多資料,「User-Agent Client Hints」可讓您要求有關使用者裝置或條件的特定資訊。

此外,User-Agent 字串的成長速度和複雜性也越來越高,導致字串剖析錯誤。UA-CH 提供的結構化可靠資料 更容易解讀用來剖析通用 Analytics (分析) 字串的現有程式碼不應中斷 (但傳回的資料較少)。如果您的網站需要特定用戶端資訊,您就必須遷移至 UA-CH。

那麼,通用 Analytics (分析) 和通用 Analytics (分析) 減少的結構會如何?

以下是縮短了使用者代理程式字串和 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 Client Hint」標頭中會含有相同資訊。例如:

      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 偵測平板電腦裝置

隨著行動裝置、平板電腦和電腦裝置之間的界限不斷變化,動態板型規格也更加普遍 (折疊螢幕、切換筆記型電腦和平板電腦模式),建議您利用回應式設計和功能偵測功能來呈現適當的使用者介面。

不過,瀏覽器針對 User-Agent 字串和 User-Agent Client Hints 提供的資訊來自同一個來源,因此同樣的邏輯形式應該都能正常運作。

舉例來說,如果檢查通用 Analytics (分析) 字串中的這個模式:

  • 手機解鎖圖案:'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 提示要求裝置型號名稱。

如何使用及測試減少的通用 Analytics (分析)?

首先,請檢查網站程式碼是否有例項和 User-Agent 字串的使用方式。如果您的網站需要剖析使用者代理程式字串來讀取裝置型號、平台版本或完整瀏覽器版本,您必須導入 UA-CH API

更新至 UA-CH API 後,建議您進行測試,確保您從使用者代理程式取得您預期的資料。測試有三種方式,每種方式日益複雜

擴充可用性以縮減使用者代理程式,意味著所有 Chrome 裝置都能夠完全縮減通用 Analytics (分析) 字串。已於 2022 年第 2 季推出 Chrome 次要版本。

在本機測試自訂字串

如要使用自訂使用者代理程式字串來測試網站,請使用 --user-agent="Custom string here" 指令列標記啟動 Chrome。詳情請參閱指令列標記

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

轉換網站程式碼中的字串

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

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

有三個傳回給伺服器的預設用戶端提示,包括瀏覽器名稱和主要版本、一個布林值 (指出瀏覽器是否在行動裝置上),以及作業系統名稱。而是在傳輸層安全標準 (TLS) 握手後方傳送。瀏覽器可以使用及支援這些功能

但在某些情況下,您可能需要擷取網站的重要資訊才能順利顯示。

最佳化重要提示

如要在瀏覽器和網路伺服器之間建立安全連線,第一個步驟是 TLS 握手。在沒有介入的情況下,Critical-CH 回應標頭的設計會在第一天傳送無重要提示的情況下,指示瀏覽器立即重試要求。

帶有重要提示的用戶端提示序列圖。
當伺服器要求重要提示時,用戶端將重試傳送第一個要求,其中含有重要提示。在本例中,Sec-CH-UA-Model 的提示要求兩次:一次是含有 Accept-CH 的用戶端提示,另一次是 Critical-CH 的重要提示。

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

ACCEPT_CH HTTP/2 和 HTTP/3 影格結合了 TLS ALPS 擴充功能,屬於連線層級最佳化作業,可在第一次 HTTP 要求時提供伺服器的用戶端提示偏好設定。這些設定需要複雜的設定,建議只在真正的重要資訊中使用。

BoringSSL (.OpenSSL 的分支) 可協助您使用 Google 在 Chromium 中的實驗功能。目前 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 限制在跨源要求使用。凡是跨來源子資源,或透過在跨來源結構定義中執行的 JavaScript 取得的 JavaScript,都必須透過 Permissions-Policy 處理委派作業。

減少使用者代理程式對機器人偵測有何影響?

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

機器人可能會選擇更新字串來反映 Chrome 傳送的減少資訊,但這完全是他們選擇的。Chrome 仍會傳送相同的 User-Agent 格式,因此如果漫遊器將自己的 ID 附加至 Chrome User-Agent 字串結尾,則可繼續如此。

如果您對特定機器人有任何疑慮,建議您直接與擁有者聯絡,詢問對方是否有計畫變更使用者代理程式字串。

互動並提供意見

瞭解詳情