為減少 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 版本和裝置型號的固定值。在 KPixel 7 上,預設值將「一律」Android 10Android 13

先前:user-agent 包含 Android 版本和裝置型號

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

後:使用固定的 Android 版本和裝置型號,縮減使用者代理程式

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

使用者代理程式格式不變

使用者代理程式縮減功能會變更使用者代理程式中傳回的,但格式保持不變。如果您只使用 User-Agent 讀取作業系統類型或主要瀏覽器版本,系統會繼續更新這類資料,您不必採取任何行動

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

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

如果您目前使用較詳細的資料,建議您檢查是否可以改用漸進式增強或功能偵測

請務必記住,user-agent 和其他使用者提供的值一樣,您應驗證該值,而非假設其正確無誤。使用者、擴充功能或其他用戶端可以輕鬆變更使用者代理程式值,甚至可能根本不會傳送。在大多數情況下,您應該可以在沒有使用者代理程式資料的情況下,向訪客提供正常運作的內容

使用 User-Agent Client Hints 要求詳細資料

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

您可能已經看到預設標頭會附帶 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 存放區中提出問題。