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

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

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

user-agent 是字串,提供使用者瀏覽器及其環境的相關資訊。舉例來說,您的網站訪客在 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 版本和裝置型號的固定值。 在 Pixel 7 上會看到類似 Android 13 的內容,其預設值在 K 上的預設值為「永遠」Android 10

變更前:使用者代理程式包含 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,如 Gecko) Chrome/95.0.0.0 Mobile Safari/537.36

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

使用者代理程式縮減功能會變更使用者代理程式中傳回的,但「格式」保持不變。如果您只透過使用者代理程式讀取作業系統類型或主要瀏覽器版本,這些資料會不斷更新,您無須採取任何行動

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

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

如果您目前使用更詳細的資料,建議您確認是否可使用漸進式強化或功能偵測

請記住,使用者代理程式與其他使用者提供的其他值一樣,請務必驗證使用者代理程式是否正確無誤。 使用者、擴充功能或其他用戶端可以輕鬆變更使用者代理程式的值,也可能完全不會傳送。 在多數情況下,您應能在沒有使用者代理程式資料的情況下,向訪客提供可正常運作的內容

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

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

您可能已經看過內含 Sec-CH-UA- 前置字串的預設標頭,當中指出瀏覽器、主要版本、作業系統,以及瀏覽器是否為行動裝置。

Chrome 的預設 User-Agent Client Hints 要求標頭:

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 查看你的裝置的使用者代理程式字串縮減字串
  • 如要查看您的裝置的所有 JavaScript 和 HTTP 標頭使用者代理程式用戶端提示,請前往 goo.gle/ua-ch-demo
  • 啟用 #reduce-user-agent Chrome 旗標,透過您的瀏覽器傳送縮短的使用者代理程式字串。

此外,您也可以註冊加入「使用者代理程式縮減來源試用」,藉此在網站上獲得減少的使用者代理程式。不過,我們將在 3 月初結束這項試用,隨著我們持續協助減少傳送數量上限的使用者代理程式來提供試用。

我們在縮減使用者代理程式的到達網頁上有更多資源,你也可以前往專屬的 user-agent-reduction GitHub 存放區來回報問題。