Chrome 和 Firefox 即將支援主要版本 100

說明 User-Agent 字串的變更、Chrome 和 Firefox 採取的策略來減輕影響,以及您可以提供的協助。

Ali Beyad
Ali Beyad
Karl Dubost
Karl Dubost
Milica Mihajlija
Milica Mihajlija

ChromeFirefox 將在幾個月內推出 100 版。這可能會導致依賴瀏覽器版本來執行商業邏輯的網站發生故障。本篇文章將說明事件發生的時間軸、Chrome 和 Firefox 採取的策略,以及您可以提供的協助。

User-Agent 字串

User-Agent (UA) 是瀏覽器在 HTTP 標頭中傳送的字串,可讓伺服器識別瀏覽器。您也可以透過 JavaScript 使用 navigator.userAgent 存取字串。通常格式如下:

<browser_name>/<major_version>.<minor_version>

舉例來說,這篇文章發布時,瀏覽器的最新版本如下:

  • Chrome:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36
  • Firefox:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0
  • Safari:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Safari/605.1.15

主要版本 100:三位數版本號碼

主要版本 100 是 Chrome 和 Firefox 的重要里程碑。這也可能會導致網站發生錯誤,因為我們會從二位數版本號碼改為三位數版本號碼。網路開發人員會使用各種技術剖析這些字串,從自訂程式碼到使用 User-Agent 剖析程式庫,然後用來判斷相應的處理邏輯。User-Agent 和其他任何版本回報機制即將回報三位數版本號碼。

版本 100 時間軸

版本 100 的瀏覽器會先在實驗版本 (Chrome Canary、Firefox Nightly) 中發布,然後再發布 Beta 版,最後才發布穩定版。

瀏覽器 時間軸
Chrome (發布時間表) 2022 年 3 月 29 日
Firefox (發布時程) 2022 年 5 月 3 日

為什麼三位數版本號碼會造成問題?

大約 12 年前,當瀏覽器首次推出第 10 版時,由於主要版本號碼從一個數字變成兩個數字,因此發現許多與 User-Agent 剖析程式庫相關的問題

由於沒有單一規格可遵循,不同瀏覽器的 User-Agent 字串格式不同,且網站會對 User-Agent 進行不同的剖析。某些剖析程式庫可能有硬式編碼的假設或錯誤,而這些假設或錯誤不會考量三位數的主要版本號碼。許多程式庫在瀏覽器改用兩位數版本號碼時,都改善了剖析邏輯,因此達到三位數里程碑時,預期會導致的問題較少。Chrome 團隊工程師 Mike Taylor 針對常見的 UA 剖析程式庫進行調查,並未發現任何問題。在實地執行 Chrome 實驗時,我們發現了一些問題,目前正在著手解決。

瀏覽器如何處理這項問題?

Firefox 和 Chrome 都進行了實驗,在目前的版本中,瀏覽器回報的主要版本為 100,以便偵測可能的網站中斷情形。這導致幾個已回報的問題,其中部分問題已修正。這些實驗會持續執行,直到版本 100 發布為止。

我們也設有備用緩解策略,以防版本 100 發布至穩定版後,對網站造成的損害超出預期。

Chrome 緩解措施

在 Chrome 中,備份計畫是使用標記將主要版本凍結為 99,並在 User-Agent 字串的子版本部分回報實際的主要版本號碼 (程式碼已上線)。

User-Agent 字串中回報的 Chrome 版本會遵循 <major_version>.<minor_version>.<build_number>.<patch_number> 模式。

如果採用備用方案,User-Agent 字串會如下所示:

99.101.4988.0

Chrome 也正在進行實驗,確保在字串的次要版本部分回報三位數值不會導致中斷,因為 Chrome User-Agent 字串中的次要版本已長時間回報 0。Chrome 團隊會根據回報的問題數量和嚴重程度,決定是否要改用備用選項。

Firefox 緩解措施

在 Firefox 中,策略取決於中斷情形的重要性。Firefox 有網站介入機制。Mozilla 網頁相容性團隊可以使用這個機制,在 Firefox 中即時修正損壞的網站。如果你在 Firefox 網址列中輸入 about:compat,就能查看目前正在修正的項目。如果網站在特定網域上發生錯誤,且主要版本為 100,可以改為傳送版本 99 來修正。

如果損壞情形普遍,您可以凍結主要版本號碼。因此,您可以採用不同的策略,每種策略各有優缺點。Mozilla 可以將實際版本號碼傳送為次要版本號碼、將字串完全凍結,或透過其他參數傳送實際版本號碼。

任何會使 User-Agent 字串變得複雜的策略,都會對生態系統造成重大影響。我們一起來避免發生其他奇怪的行為。

你能提供什麼協助?

在 Chrome 和 Firefox Nightly 中,您可以將瀏覽器設為立即回報版本 100,並回報遇到的任何問題。

設定 Chrome 將主要版本號碼回報為 100

  1. 前往chrome://flags/#force-major-version-to-100
  2. 將選項設為 Enabled

將 Firefox Nightly 設定為回報主要版本為 100

  1. 開啟 Firefox Nightly 的「設定」選單。
  2. 搜尋「Firefox 100」,然後勾選「Firefox 100 User-Agent 字串」選項。

測試並提交報告

  • 如果您是網站維護者,請使用 Chrome 和 Firefox 100 測試網站。請檢查 User-Agent 剖析程式碼和程式庫,確保它們能夠處理三位數版本號碼。我們已編譯一些目前無法運作的模式
  • 如果您開發使用者代理程式剖析程式庫,請新增測試來剖析大於或等於 100 的版本。早期測試結果顯示,最近版本的程式庫可以正確處理這項問題。不過,網際網路有悠久的歷史,因此如果您使用的是舊版剖析程式庫,就該檢查問題並升級了。
  • 如果您在瀏覽網頁時發現 100 版主要版本有任何問題,請在 webcompat.com 提交報告