為保護使用者的隱私,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 資訊。
Mac | ➡ | Macintosh;Intel Mac OS X 10_15_7 |
Windows | ➡ | Windows NT 10.0;Win64;x64 |
ChromeOS | ➡ | X11; CrOS x86_64 14541.0.0 |
Linux | ➡ | X11;Linux x86_64 |
從 Chrome 110 開始修正 Android 版本和裝置型號
自 Chrome 110 版起,我們會逐步推出 Android 版本和裝置型號的固定值。
在 Pixel 7
上會看到類似 Android 13
的內容,其預設值在 K
上的預設值為「永遠」為 Android 10
。
Mozilla/5.0 (Linux;Android 13;Pixel 7) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
Mozilla/5.0 (Linux;Android 10;K) 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-Version
和 Sec-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()
,然後傳入所需值的陣列:platformVersion
和 model
。這會傳回一個承諾,以及一個包含特定值的物件。
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 存放區來回報問題。