Firebase 託管運用強大的全球 CDN
所有請求的靜態內容都會自動快取到 CDN。如果發生以下情況: 重新部署你的網站內容,Firebase 代管會自動清除 快取內容到下一個要求為止
不過,由於 Cloud Functions 和 Cloud Run 服務 內容就會因為更新時而產生不同 使用者輸入內容或識別資訊為配合這類需求, 根據預設,後端程式碼處理的資料「不會」快取 CDN 中的快取內容。
但是您可以為動態內容設定快取行為。適用對象 舉例來說,如果函式只會定期產生新內容 對應用程式執行快取,至少在短時間內快取生成的內容。
您也能以同樣的方式設定快取行為,可能縮減函式運作情形 執行成本,因為內容是透過 CDN 而非從 觸發的函式進一步瞭解如何最佳化函式執行與服務 Cloud Functions 與 Cloud 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-age
和 s-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
標頭。請注意,「託管」會新增
如果要求是 Cookie
和 Authorization
,則預設為 Vary
標頭
為動態內容而生這樣就能確保任何工作階段或 Cookie 授權
您使用的標頭屬於快取金鑰的一部分,可防止意外外洩
內容
同時注意:
只能快取
GET
和HEAD
要求。使用其他方式的 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 必須符合以下條件,才能使用
應用程式會根據使用者的授權提供不同內容。