為減少 Chrome 的使用者代理程式做好準備(')

為保護使用者隱私,Chrome 會持續縮減使用者代理程式字串中分享的資訊。

自 Chrome 110 (2023 年 2 月) 起,我們將逐步推出適用於 Android 版本和裝置型號的固定值;在 K 型號中,預設價值一律為 Android 10。 如果您使用使用者代理程式偵測訪客的作業系統版本、Android 裝置型號或詳細瀏覽器版本,可能需要採取相關行動,詳情請參閱下文。

使用者代理程式這個字串可提供使用者瀏覽器及其環境的相關資訊,例如讓您知道網站訪客在 Android 系統上執行 Chrome 110 版。 瀏覽器會以 HTTP 標頭傳送此項目,並透過 JavaScript 提供這些資訊。

完整的使用者代理程式字串問題在於,它預設每次發出請求都會分享瀏覽器的詳細資訊,這是允許跨網站追蹤的主要因素。 我們的目標是減少被動收集這類資料的機會,同時提供 API,讓您在需要時主動存取資料。

目前為止縮減使用者代理程式大小

我們已開始移除預設可用的部分使用者代理程式資料,並以固定值取代。

Chrome 101 起,我們將子版本號碼替換為零 (例如Chrome/101.3.2.1 成為 Chrome/101.0.0.0

Chrome 107 起,我們將電腦作業系統版本和 CPU 資訊替換成該平台的固定值。

MacMacintosh;Intel Mac OS X 10_15_7
WindowsWindows NT 10.0;Win64;x64
ChromeOSX11;CrOS x86_64 14541.0.0
LinuxX11;Linux x86_64

修正從 Chrome 110 開始出現的 Android 版本和裝置型號

Chrome 110 起,我們將陸續推出適用於 Android 版本和裝置型號的固定值。 預設值將一律在模型 K一律Android 10,而不是 Android 13Pixel 7 上顯示類似內容。

修改前:使用者代理程式包含 Android 版本和裝置型號

Mozilla/5.0 (Linux;Android 13Pixel 7) AppleWebKit/537.36 (KHTML,例如 Gecko) Chrome/95.0.0.0 Mobile Safari/537.36

調整後:採用修正的 Android 版本和裝置型號,縮短使用者代理程式

Mozilla/5.0 (Linux;Android 10K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36

使用者代理程式格式沒有任何變更

使用者代理程式縮減設定會變更使用者代理程式傳回的,但 format 維持不變。 如果您只用使用者代理程式讀取作業系統類型或主要瀏覽器版本,資料會繼續如常更新,您不需要採取任何行動

使用者代理程式字串的平台、瀏覽器名稱、瀏覽器主要版本和行動指標部分會繼續如常更新。
作業系統類型、裝置型號和瀏覽器子版本為靜態值。
其餘使用者代理程式字串的其餘部分則維持不變。

使用者代理程式的替代方案

如果您目前使用的資料較多,建議改為使用漸進式增強或功能偵測功能。

請記住,使用者代理程式與任何其他使用者提供的值一樣,請務必進行驗證,切勿設想正確。 使用者、擴充功能或其他用戶端可以輕易變更使用者代理程式值,或完全不傳送。 在多數情況下,您應在沒有使用者代理程式資料的情況下,為訪客提供有效內容

使用「使用者代理程式用戶端提示」要求詳細資料

有許多正當理由可以存取詳細的使用者代理程式資料,例如提供裝置專屬的內容、反詐欺功能或精細記錄。 如果您需要更詳細的資料,可以使用 User-Agent Client Hints (UA-CH) API 來存取。 就像使用者代理程式一樣,UA-CH 也能透過 HTTP 標頭或 JavaScript 取得。

您可能已經看過系統傳送的預設標頭含有 Sec-CH-UA- 前置字串,讓您瞭解瀏覽器、主要版本、作業系統,以及瀏覽器是否為行動裝置。

Chrome 的預設使用者代理程式用戶端提示要求標頭:

Sec-CH-UA: "Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Platform: "Android"

您可以在回應中使用 Accept-CH 標頭以要求更多資料。 在這種情況下,您可以要求 Sec-CH-UA-Platform-VersionSec-CH-UA-Model,在後續要求中重新取得該 Android 版本和裝置類型。

伺服器傳回回應標頭,指定平台版本和型號:

Accept-CH:
  Sec-CH-UA-Platform-Version,
  Sec-CH-UA-Model

向 Chrome 要求傳回標頭,包括 Android 版本和型號名稱:

Sec-CH-UA-Platform-Version: "13.0.0"
Sec-CH-UA-Model: "Pixel 7"

使用 JavaScript 時,您也可以在 userAgentData API 上呼叫 getHighEntropyValues(),並傳入所需值陣列:platformVersionmodel。 這會傳回包含特定值的物件的承諾。

navigator.userAgentData
 .getHighEntropyValues(
   ['platformVersion', 'model']
 ).then(ua => { console.log(ua)
 });

{
  "platformVersion": "13.0.0",
  "model": "Pixel 7"
}

跨來源或初始要求

如果網頁上有跨來源資源需要這些值,您可以透過 Permissions-Policy HTTP 標頭或在 HTML 中使用 Delegate-CH 中繼標記授予存取權

如果網站必須在第一個頂層要求中納入這些機密值,則可以使用 Critical-CH HTTP 標頭,指示瀏覽器透過這些額外提示重新嘗試初始要求。 這對於需要更新的舊版系統可能很有幫助,但在您提供初始 HTML 之前,最好不要依賴這些敏感值。

瞭解詳情

如要瞭解縮減後的使用者代理程式字串實際運作情形,請參閱下列資源:

  • 請前往 goo.gle/reduced-ua-demo,查看你的裝置適用的使用者代理程式字串精簡字串
  • 前往 goo.gle/ua-ch-demo,查看「您的」裝置適用的所有 JavaScript 和 HTTP 標頭使用者代理程式用戶端提示
  • 啟用 #reduce-user-agent Chrome 旗標,在 您的 瀏覽器中傳送經過簡化的使用者代理程式字串。

您仍然可以註冊參加使用者代理程式縮減來源試用,在網站上享有較少的使用者代理程式。不過,我們將在 3 月初結束這項試用,因為我們會繼續預設提供較少的使用者代理程式。

如需更多資源,請參閱使用者代理程式縮減到達網頁。你也可以前往專屬的 user-agent-reduction GitHub 存放區回報問題。