參與 Accept-Language 減少來源試用計畫

「減少接受語言」功能旨在降低 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-LanguageContent-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 回應標頭:

  1. Origin-Trial: <ORIGIN TRIAL TOKEN> 新增至 HTTP 回應標頭,其中 <ORIGIN TRIAL TOKEN> 包含註冊來源試用時取得的權杖。
  2. 在 HTTP 回應標頭中加入 Content-Language,指出適合目標對象的語言。
  3. 在 HTTP 回應標頭中新增 Variants,指出網站支援的語言。
  4. [選用] 將 Vary: Accept-Language 新增至 HTTP 回應,藉此建立內容協商用的快取金鑰。
  5. 設定這些標頭只會觸發指定來源的瀏覽器語言協商 (初始要求可能會重新啟動)。為確保網站能向使用者顯示正確的語言表示法,您也必須根據使用者的 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 值回應 enja,如果不相符,則預設為 en。在此情況下,網站也能根據 Accept-Language 值,提供對應語言網頁的重新導向 (/en/ja)。如需重新導向相關詳細範例,請參閱實作文件

第三方來源試用支援

我們目前不支援將您的網域註冊為試用的第三方。如果您營運的服務是以子資源的形式導入,但屬於各來源的子資源 (例如廣告放送或分析),則只有在頂層網站正在進行來源試用時,您才會收到縮減的 Accept-Language 標頭。

驗證來源試用是否正常運作

排解 Chrome 來源試用問題指南提供了完整的檢查清單,可確保您的權杖設定正確。

您可以在 chrome://settings/languages 或「設定」→「語言」頁面設定多種語言及其優先順序。建議您選取網站「不」支援的語言,並移至清單頂端,確保能觸發額外的重新協商。

包含來源試用權杖的初始回應標頭應如下所示:

要求標頭數量減少的 Accept-Language 要求螢幕截圖。

後續包含簡化的 Accept-Language 的要求標頭如下所示:

包含來源試用權杖的初始回應標頭。

停止參與來源試用

在試用期間,您隨時可以停止參與,並取得使用者 Accept-Language 的完整清單。如要停止參與,請按照下列步驟操作:

  1. 從 HTTP 回應中移除「接受語言縮減試用」的 Origin-Trial 標頭。
  2. [選用] 如果您不想傳送這個標頭,請移除在 HTTP 回應中加入來源試用的 Variants 標頭。您也可以使用 Variants 搭配空白值來完成此操作。
  3. [選用] 如果您不想傳送此標頭,請移除在 HTTP 回應中加入來源試用的 Content-Language 標頭。

來源試用時間長度

Accept-Language Reduction 來源試用將執行至少六個月,也就是約六個 Chrome 里程碑。來源試用會在 M109 中顯示,並於 M114 結束 (這表示提供試用期的最後一個 Chrome 版本)。屆時,Chrome 會先評估來源試用的意見回饋,然後再依序傳送縮短的 Accept-Language HTTP 字串:先減少 Accept-Language HTTP 標頭,再減少 JS 介面。如果網站需要更多時間進行測試,可以選擇加入後續的淘汰來源試用,至少在接下來六個月內存取完整的 Accept-Language 字串。準備就緒後,我們會發布更多關於淘汰試用的詳細資料。

提供意見

如有任何問題或意見回饋,請向 Accept-Language Reduction GitHub 存放區提交。