減少 Accept-Language 的做法,是指在 Accept-Language
標頭中減少使用者的語言偏好設定,並只傳送使用者最偏好的語言 (僅限一種),藉此減少被動指紋記錄途徑。
自 Chrome 109 Beta 版起,我們將開放 來源試用版,讓網站選擇接收縮減版 Accept-Language
標頭。這樣一來,網站就能在未來版本的 Chrome 中,在 Accept-Language
縮減後成為預設行為之前,發現並修正問題。如要在功能推出至穩定版前進行測試,請務必在 Chrome 109 發布日期 (目前預定於 2023 年 1 月 10 日) 之前選擇加入並進行測試。
請參考下方 Accept-Language
標頭縮減前後的範例。
Accept-Language: en-GB,en;q=0.9,de;q=0.8,fr;q=0.7
Accept-Language: en-GB
以下概略說明原點測試和預期結果。您可以前往 Accept-Language Reduction GitHub 存放區,分享對這項異動或來源試用期間遇到的任何問題的意見回饋。
Accept-Language 是什麼?
Accept-Language 字串會在每個 HTTP 要求中共用,並在 JavaScript 中公開給瀏覽器載入的所有資源。目前包含使用者偏好的所有語言。
為什麼要減少 Accept-Language 的使用?
Accept-Language Reduction 是為了減少 Chrome 中的被動指紋辨識途徑。
目前,Accept-Language
標頭預設會在每個 HTTP 要求中共用,並在 JavaScript 中公開給瀏覽器載入的所有資源。其中包含使用者的所有語言偏好設定。我們推出了一種新的網站指示多語言內容的方式,讓瀏覽器負責進行語言協商並顯示偏好語言,而不是在網站希望提供多語言內容的情況下,讓瀏覽器傳送使用者已設定的完整語言清單。
另一個原因是許多網站可能根本不會使用 Accept-Language
標頭進行語言協商 (例如,一項研究指出,前 10,000 個網站中只有 7.2% 使用 Accept-Language
)。Chrome 無痕模式已將 Accept-Language
減少為一個。
這對網頁開發人員有何影響?
依賴 Accept-Language
進行語言協商的網站應做好準備,以便接收減少的 Accept-Language
,並考慮參與原點測試。減少的 Accept-Language
值會顯示在:
Accept-Language
HTTP 要求標頭。navigator.languages
JavaScript getter。
瀏覽器會負責進行語言協商,選取要傳送給網站的使用者偏好語言。為此,網站需要在回應標頭中加入兩個標頭 Variants
(新標頭表示網站支援的語言) Accept-Language
和 Content-Language
(請參閱下方詳細範例)。
目前的 Accept-Language
方案調降內容不包括 iOS 和 WebView,這些平台將繼續取得使用者的完整 Accept-Language
清單。我們預計日後會支援這些平台。
Accept-Language Reduction 來源試用
原始試用版需要參與網站在回應中提供權杖,告知瀏覽器啟用指定的試用版。不過,這也表示瀏覽器在向網站提出初始要求時,無法得知該網站是否參與來源測試。也就是說,工作階段中的初始要求不會傳送縮減的 Accept-Language header
。該網頁中的子資源要求 (包括同源和跨來源) 都會收到縮減的 Accept-Language
標頭。後續的相同來源導覽也會收到縮減的 Accept-Language
標頭。如果頂層框架要求含有有效的來源測試權杖,跨來源導覽會恢復傳送完整標頭,而網頁內的跨來源要求 (例如第三方 iframe 要求) 仍會傳送縮減的 Accept-Language
標頭。
這與使用者代理程式縮減來源測試類似,如要進一步瞭解內部 Chromium 導入作業,請參閱「實作縮減 Accept-Language HTTP 標頭」一文。
參與 Accept-Language Reduction 來源試驗
如需進一步指引,請參閱Chrome 來源試用功能的使用說明,但以下列出必要步驟。
步驟 1
如要註冊原始試用方案並取得網域的權杖,請前往「試用接受語言減少功能」頁面。
步驟 2
更新 HTTP 回應標頭:
- 將
Origin-Trial: <ORIGIN TRIAL TOKEN>
新增至 HTTP 回應標頭,其中 <ORIGIN TRIAL TOKEN
> 包含註冊來源測試時取得的權杖。 - 將
Content-Language
新增至 HTTP 回應標頭,以指出要提供給目標對象的語言。 - 將
Variants
新增至 HTTP 回應標頭,指出網站支援的語言。 - [選用] 將
Vary: Accept-Language
新增至 HTTP 回應,以便建立內容交涉的快取鍵。 - 設定這些標頭只會針對指定來源觸發瀏覽器語言協商 (可能會重新啟動初始要求)。為了讓網站向使用者顯示正確的語言表示法,您也需要更新網站,讓網站根據使用者的 Accept-Language 標頭傳送內容 (請參閱下方範例)。
步驟 3
在 Chrome M109 以上 Beta 版中載入網站,並開始接收縮減的 Accept-Language 字串。
請將任何問題或意見回饋提交至 Accept-Language Reduction GitHub 存放區。
示範
如需多語言網站 (已選擇加入來源測試) 的示範 (以及原始碼),請參閱 https://reduce-accept-language.glitch.me/。
如需啟用和停用來源試驗 (以及原始碼) 的示範,請參閱 https://reduce-accept-language-ot.glitch.me/。
例如,example.com
支援 ja
(日文) 和 en
(英文)。要求可能為:
GET / HTTP/1.1
Host: example.com
Accept-Language: en
網站會根據使用者的 accept-language 瞭解使用者偏好英文內容。回應標頭可能包含:
HTTP/1.1 200 OK
Content-Language: en
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
如果使用者偏好日文內容,要求會如下所示:
GET / HTTP/1.1
Host: example.com
Accept-Language: ja
在這種情況下,網站會回應日文內容的標頭:
HTTP/1.1 200 OK
Content-Language: ja
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
在伺服器端,網站可能會尋找特定語言支援,但如果未偵測到支援,就會改用預設語言:
if(accept_language == 'ja') {
res.response('ja_page')
}
else {
res.response('en_page')
}
在上述範例中,example.com
會根據 Accept-Language
值回應 en
或 ja
,如果沒有任何相符項目,則預設為 en
。在這種情況下,網站也可以根據 Accept-Language
值,將使用者重新導向至對應的語言網頁 (/en
或 /ja
)。如需重新導向的詳細範例,請參閱導入文件。
第三方來源試用支援
我們目前不支援第三方試用版註冊網域。如果您經營的服務是以子資源形式在各個來源中實作 (例如廣告放送或分析),只有在頂層網站參與來源測試時,您才會收到簡化版 Accept-Language
標頭。
驗證來源測試是否正常運作
Chrome 來源測試疑難排解指南提供完整的檢查清單,可確保您的權杖設定正確無誤。
您可以透過 chrome://settings/languages
或「設定」→「語言」來設定多種語言和優先順序。建議選取網站「不支援」的語言,並將該語言移至清單頂端,以確保觸發額外的重新協商。
包含原始試用權限權杖的初始回應標頭應如下所示:

後續要求標頭包含縮減的 Accept-Language,如下所示:

停止參與來源試用
您可以在試用期間的任何時間點停止參與,並接收使用者的 Accept-Language 完整清單。如要停止參與:
- 從 HTTP 回應中移除 Accept-Language Reduction 試驗的
Origin-Trial
標頭。 - [選用] 如果您不想傳送此標頭,請移除在 HTTP 回應中加入的
Variants
標頭,以便選擇加入來源試用。您也可以使用Variants
搭配空白值,達成這個目標。 - [選用] 如果您不想傳送此標頭,請移除在 HTTP 回應中加入的
Content-Language
標頭,以便選擇加入來源試用。
來源試用期長度
Accept-Language Reduction 來源試用功能將至少執行六個月,相當於約六個 Chrome 里程碑。來源試用功能會在 M109 中顯示,並在 M114 結束 (也就是提供試用功能的最新 Chrome 版本)。屆時,Chrome 會先評估原始測試的意見回饋,再以分階段的方式傳送縮減的 Accept-Language 字串:先縮減 Accept-Language HTTP 標頭,再縮減 JS 介面。如果網站需要更多時間進行測試,可以選擇參與後續的淘汰來源試用計畫,這樣就能在至少六個月內繼續存取完整的 Accept-Language 字串。我們會在停用前測試功能就緒時,發布更多相關詳細資訊。
提供意見
請將任何問題或意見回饋提交至 Accept-Language Reduction GitHub 存放區。