「減少接受語言」功能旨在降低 Accept-Language
標頭中的使用者語言偏好設定,並只傳送使用者最偏好的語言,藉此減少被動指紋介面。
從 Chrome 109 Beta 版開始,我們將開放來源試用,啟用 Accept-Language Reduction 可讓網站選擇接收縮減的 Accept-Language
標頭。這樣一來,在日後的版本中,Accept-Language
就會成為 Chrome 的預設行為,讓網站可以發現並修正問題。如要在穩定母體推出前測試這項功能,請務必在 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 ?
每個 HTTP 要求都會共用 Accept-Language 字串,並在 JavaScript 中對瀏覽器載入的所有資源公開。這個檔案目前包含使用者的所有偏好語言。
為什麼 Accept-Language 降低了?
「減少接受語言」功能可減少 Chrome 中被動數位指紋採集介面。
目前,每個 HTTP 要求都會預設共用 Accept-Language
標頭,並在 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 header
。針對該頁面中的子資源 (相同來源和跨來源資源) 的要求,會收到縮減的 Accept-Language
標頭。後續的相同來源瀏覽也會收到縮減的 Accept-Language
標頭。跨來源導覽將還原為傳送完整標頭,而頁面中的跨來源要求 (例如第三方 iframe 要求) 仍會傳送縮減的 Accept-Language
標頭 (如果頂層影格要求具備有效的來源試用權杖)。
這與 User-Agent 縮減來源試用類似,如果您想進一步瞭解內部 Chromium 實作,請參閱「實作減少 Accept-Language HTTP 標頭」。
參與 Accept-Language Reduction 來源試用
您可以參閱「開始使用 Chrome 的來源試用」一文,取得進一步指引,但需要完成以下步驟。
步驟 1
如要註冊來源試用並取得網域權杖,請造訪「接受語言縮減試用期」頁面。
步驟 2
更新 HTTP 回應標頭:
- 將
Origin-Trial: <ORIGIN TRIAL TOKEN>
新增至 HTTP 回應標頭,其中 <ORIGIN TRIAL TOKEN
> 包含註冊來源試用時取得的權杖。 - 在 HTTP 回應標頭中加入
Content-Language
,指出適合目標對象的語言。 - 在 HTTP 回應標頭中新增
Variants
,指出網站支援的語言。 - [選用] 將
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
網站知道使用者根據自己接受的語言,偏好以英文顯示的內容。回應標頭可能包含:
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 回應中移除「接受語言縮減試用」的
Origin-Trial
標頭。 - [選用] 如果您不想傳送這個標頭,請移除在 HTTP 回應中加入來源試用的
Variants
標頭。您也可以使用Variants
搭配空白值來完成此操作。 - [選用] 如果您不想傳送此標頭,請移除在 HTTP 回應中加入來源試用的
Content-Language
標頭。
來源試用時間長度
Accept-Language Reduction 來源試用將執行至少六個月,也就是約六個 Chrome 里程碑。來源試用會在 M109 中顯示,並於 M114 結束 (這表示提供試用期的最後一個 Chrome 版本)。屆時,Chrome 會先評估來源試用的意見回饋,然後再依序傳送縮短的 Accept-Language HTTP 字串:先減少 Accept-Language HTTP 標頭,再減少 JS 介面。如果網站需要更多時間進行測試,可以選擇加入後續的淘汰來源試用,至少在接下來六個月內存取完整的 Accept-Language 字串。準備就緒後,我們會發布更多關於淘汰試用的詳細資料。
提供意見
如有任何問題或意見回饋,請向 Accept-Language Reduction GitHub 存放區提交。