管理快取行為

Firebase 託管運用強大的全球 CDN

所有請求的靜態內容都會自動快取到 CDN。如果發生以下情況: 重新部署你的網站內容,Firebase 代管會自動清除 快取內容到下一個要求為止

不過,由於 Cloud Functions 和 Cloud Run 服務 內容就會因為更新時而產生不同 使用者輸入內容或識別資訊為配合這類需求, 根據預設,後端程式碼處理的資料「不會」快取 CDN 中的快取內容。

但是您可以為動態內容設定快取行為。適用對象 舉例來說,如果函式只會定期產生新內容 對應用程式執行快取,至少在短時間內快取生成的內容。

您也能以同樣的方式設定快取行為,可能縮減函式運作情形 執行成本,因為內容是透過 CDN 而非從 觸發的函式進一步瞭解如何最佳化函式執行與服務 Cloud FunctionsCloud Run 說明文件。

不過,如果要求傳回 404 錯誤,則不受此限。CDN 會快取 服務在 10 分鐘內對不存在的網址發出 404 回應, 針對該網址的要求,會由 CDN 提供。如果您變更了服務 ,讓內容存在於這個網址,則 CDN 會繼續放送 最多 10 分鐘 404 秒,然後正常放送該網址的內容。

如果 404 回應中已包含由您設定的快取標頭 而 Cloud Functions 或 Cloud Run 服務 預設值為 10 分鐘,並完整決定容器的快取行為 CDN

進一步瞭解 Google 的 網頁開發人員說明文件

設定快取控制項

您主要用來管理動態內容的快取工具是 Cache-Control 標頭。設定這個標頭後,您就能透過 瀏覽器和 CDN 讀取內容的時間長度在您的函式中, 您設定 Cache-Control 的方式如下:

res.set('Cache-Control', 'public, max-age=300, s-maxage=600');

在這個標頭範例中,指令會執行以下三項作業:

  • public:將快取標示為 public。這表示瀏覽器「和」 中繼伺服器 (即 Firebase 託管的 CDN) 可以快取 而這些內容

  • max-age:告知瀏覽器和 CDN 快取的秒數 而這些內容超過設定的時間後,瀏覽器和 CDN 就必須 使用來源伺服器重新驗證內容。在範例標題中 可讓瀏覽器和 CDN 快取內容五分鐘 (請參閱 s-maxage

  • s-maxage - 僅針對 CDN 快取覆寫 max-age 指令;告訴 CDN 能快取內容的秒數設定時間時 CDN 必須向來源伺服器重新驗證內容。在 因此,我們針對 僅限 CDN 覆寫 max-age 的設定。 讓 CDN 快取內容,時間長達十分鐘

max-ages-maxage 的值設為最長時間 確保使用者接收到過時的內容。如果網頁變更 請使用較低的時間值不過,其他類型的內容 安全地快取長達數小時、數天,甚至是數月

如要進一步瞭解 Cache-Control 標頭,請前往 Mozilla 開發人員網路 在 Google 的 網頁程式開發人員文件

系統何時提供快取內容?

瀏覽器和 CDN 快取內容的依據如下:

  • 主機名稱
  • 路徑
  • 查詢字串
  • Vary 標頭中指定的要求標頭內容

更動標頭

Vary 標頭 決定要使用哪些要求標頭來提供適當的 回應 (快取內容是否有效,或者內容應 透過來源伺服器重新驗證)。

Firebase 託管會自動在您的 Google Cloud 主機中設定適當的 Vary 標頭 回答常見情況大多數情況下, 關於 Vary 標頭。然而,在一些進階用途中 您需影響快取的其他標頭。這樣的話 您可以在回應中設定 Vary 標頭。例如:

res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');

在此情況下,Vary 標頭的值為:

vary: X-My-Custom-Header, x-fh-requested-host, accept-encoding, cookie, authorization

使用這些設定時,兩個不同的相同要求 系統會分別快取 X-My-Custom-Header 標頭。請注意,「託管」會新增 如果要求是 CookieAuthorization,則預設為 Vary 標頭 為動態內容而生這樣就能確保任何工作階段或 Cookie 授權 您使用的標頭屬於快取金鑰的一部分,可防止意外外洩 內容

同時注意:

  • 只能快取 GETHEAD 要求。使用其他方式的 HTTPS 要求 一律不會快取的方法。

  • Vary 標頭中新增設定時請務必謹慎。更多設定 否則 CDN 可以提供快取內容的可能性就越低。 另請注意,Vary 是以 request 標頭為基礎,而非 response 標題。

使用 Cookie

搭配使用 Firebase 與 Cloud Functions 或 Cloud Functions 時 Cloud Run 通常會從傳入的要求中去除 Cookie。這個 是讓 CDN 快取行為有效率的必要條件。 只有以特殊名稱的 __session Cookie 能傳遞至 新的執行程序

如果有 __session Cookie,系統會自動將 __session Cookie 加入快取中 代表擁有不同 Cookie 的兩位使用者無法 接收彼此的快取回應。__session Cookie 必須符合以下條件,才能使用 應用程式會根據使用者的授權提供不同內容。