Chrome 的私密預先擷取 Proxy

Katie Hempenius
Katie Hempenius
Kenji Baheux
Kenji Baheux
Michael Buettner
Michael Buettner

使用跨網站預先擷取功能加快最大內容繪製 (LCP) 速度。

從 Android 版 Chrome 103 開始,Chrome 將逐步推出私人預先快取 Proxy 功能,讓 Google 搜尋和其他參與網站的出站導覽速度提升 30%。這項私人預先擷取 Proxy 功能可在使用者瀏覽網頁前,預先擷取跨來源內容,且不會將使用者資訊揭露給目的網站。

請繼續閱讀下文,瞭解這項功能的運作方式這項功能如何協助您大幅改善網站的 Largest Contentful Paint (LCP),或是參照網址網站如何協助使用者加快跨網站瀏覽速度來達成目標。

私人預先擷取 Proxy 的運作方式

安全的通訊管道

這項功能會使用 CONNECT Proxy,在 Chrome 與代管預先擷取內容的代管伺服器之間建立安全的通訊管道。這個安全的通訊管道可防止 Proxy 檢查任何資料移轉。值得注意的是,雖然 Private Prefetch Proxy 會辨識主機名稱,藉此建立安全的通訊管道,但不會看到完整網址,資源本身。

動畫:顯示資料透過 Proxy 的流程。
透過 CONNECT 代理伺服器預先擷取網站,可避免使用者資訊外洩。

此外,由於安全通訊管道會進行端對端加密,中介者無法觀察主機名稱或預先擷取的網站內容。最後,Proxy 本身會防止目的地伺服器看到使用者的 IP 位址。

防止識別使用者身分

除了先前詳述的網路層面外,我們還需要防止伺服器在預先擷取時,透過先前儲存在裝置上的資訊來識別使用者。有鑑於此,Chrome 目前限制使用者只能使用私人預先擷取 Proxy 到沒有 Cookie 或其他本機狀態的網站。以下是透過私人預先載入 Proxy 提出的預先載入要求限制:

  • Cookie:預先擷取要求不得攜帶 Cookie。
    • 如果資源有 Cookie,Chrome 會進行未經授權的擷取作業,但不會使用回應 (請參閱後續的「快取」一節)。
    • 雖然預先擷取要求的回應可能包含 Cookie,但使用者瀏覽預先擷取的網頁時,系統才會儲存這些 Cookie。
  • 指紋辨識:其他可用於指紋辨識的介面也已調整。舉例來說,預先擷取 Proxy 傳送的 User-Agent 標頭只會涵蓋有限的資訊。

我們希望日後能將私人預先快取 Proxy 擴充至含有 Cookie 或本機狀態的連結,同時維持相同的隱私權特性。詳情請參閱「後續步驟」一節。

快取

即使資源已存在快取中,Chrome 仍會預先擷取資源,但不會攜帶任何條件式標頭,例如 ETagIf-Modified-Since (這些標頭包含伺服器設定值,即使沒有 Cookie 也能用於追蹤)。系統會執行這項預先擷取作業,避免用戶端的快取狀態洩漏到預先擷取的網站。此外,只有在使用者決定前往預先擷取的網站時,Chrome 才會將預先擷取的資源提交至快取。

開始使用私人預先載入 Proxy

網站擁有者

網站擁有者無須採取任何行動,即可開始在使用者沒有 Cookie 或本機狀態的連結上,享有私人預先擷取快取的優勢。根據我們的實驗結果,這對大多數網站來說都是重大商機。此外,透過超快速的載入體驗,讓初次造訪或不常造訪的使用者留下深刻印象,也是不錯的做法。根據過去的實驗,預先擷取導覽內容時,最大內容繪製時間可加快 20% 至 30%。

我們希望日後能擴大這項功能的應用範圍,讓其連結 Cookie 或本機狀態,同時維持隱私權特性。Cookie 的難題在於,可能會以難以預測的方式改變使用者體驗。因此,網站擁有者很可能必須選擇加入或調整網站,才能享有私人預先載入 Proxy 為含有 Cookie 的連結帶來的效益。

具體來說,雖然預先載入要求不會提供憑證,但網頁在使用者前往時,仍可存取 Cookie 和其他本機狀態。開發人員可以利用這項功能,根據 Cookie 或本機狀態重新加入個人化功能和變更。或者,開發人員可能也想宣告特定資源無須使用 Cookie 即可預先載入並使用,也就是不依賴任何 Cookie 的資源。請參閱「後續步驟」一節,進一步瞭解相關資訊並告知我們的計畫。

受限於地理區域的內容或服務

如果您的網站會根據使用者的 IP 位址,在不同市場中顯示不同的行為 (例如不同的內容或選擇性存取),您可能會想知道如何處理 Private Prefetch Proxy 的預先擷取要求。請務必瞭解,Private Prefetch Proxy 的技術是由遍布全球的數個伺服器提供,且該 Proxy 的 IP 會位於使用者啟動預先擷取時所在的國家/地區。

因此,我們建議您採取下列做法:

  1. 根據 Sec-Purpose: Prefetch; anonymous-client-ip HTTP 標頭的存在,識別 Private Prefetch Proxy 的預先載入要求。
  2. 透過 IP 位址查詢發出要求的私人預先擷取 Proxy 的地理位置。如需最新的已推出地理區域和對應 IP 位址清單,請參閱這份資源
  3. 根據與此特定地理位置相關聯的市場放送資源。

車流控管

根據過去的實驗,這項功能通常會導致對主要資源 (例如 HTML 文件) 的額外要求不到 2%。不過,如果您是謹慎派,可以使用流量建議的比例欄位,控制私人預先載入 Proxy 應允許通過的流量量。您可以先從小數字開始,例如 0.3 (即 30%),然後逐漸增加至 1.0 (即 100%),方法是將下列 JSON 新增至 /.well-known/traffic-advice 檔案,該檔案必須以 application/trafficadvice+json MIME 類型提供:

[{
  "user_agent": "prefetch-proxy",
  "fraction": 0.3
}]

fraction 欄位是介於 0.0 (完全沒有預先讀取) 和 1.0 (100% 的預先讀取要求都通過) 之間的浮點值。

您也可以透過下列設定完全停用這項功能:

[{
  "user_agent": "prefetch-proxy",
  "disallow": true
}]

/.well-known/traffic-advice 檔案是由 Proxy 擷取,而非用戶端,並根據一般 HTTP 快取語意在 Proxy 中快取。如要獲得更多彈性,例如資料存取量突然激增,建議您暫時拒絕含有 503 狀態碼的預先擷取要求 (Sec-Purpose: prefetch;anonymous-client-ip),並在回應中設定 Cache-Control: no-store 標頭。您也可以新增 Retry-After 標頭,指示 Chrome 要等待多久才會重試預先擷取要求。

推薦人網站擁有者

如果您經營的網站有許多連往其他網站的連結,建議您使用私人預先載入 Proxy 功能,加快這些跨來源導覽的速度。你必須為網頁新增推測規則,Chrome 才會知道你認為應透過私密預先擷取 Proxy 預先擷取哪個網頁。以下是簡單的範例:

<script type="speculationrules">
{
  "prefetch": [
    "source": "list",
    "urls": ["https://example.com/index.html"],
    "requires": ["anonymous-client-ip-when-cross-origin"]
  ]
}
</script>

後續步驟

這只是第一步。我們希望能根據社群的興趣和意見回饋,擴大並改善這項功能。舉例來說,歡迎提供意見回饋,瞭解如何擴充包含 Cookie 和本機狀態的連結,以盡可能減少開發人員的不便,或是提高這項功能對參照網址網站實用性的方法。

閱讀完整內容