Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

管理緩存行為

Firebase託管使用功能強大的全局CDN來使您的網站盡可能快。

任何請求的靜態內容都會自動緩存在CDN上 。如果您重新部署網站的內容,Firebase Hosting會自動清除CDN上所有緩存的靜態內容,直到下一個請求為止。

但是,由於Cloud Functions和Cloud Run服務會動態生成內容,因此給定URL的內容可能會根據用戶輸入或用戶身份等因素而有所不同。為了解決這個問題,默認情況下,由後端代碼處理的請求不會緩存在CDN上。

但是,您可以配置動態內容的緩存行為 。例如,如果某個功能僅定期生成新內容,則可以通過至少在短時間內緩存生成的內容來加快應用程序的速度。

您還可以潛在地降低函數執行成本,因為內容是從CDN而不是通過觸發的函數提供的。在Cloud Functions and Cloud Run文檔中閱讀有關優化函數執行和服務的更多信息。

在Google的Web開發人員文檔中了解有關緩存行為的更多信息。

設置緩存控制

用於管理動態內容緩存的主要工具是Cache-Control標頭。通過配置此標頭,您可以與瀏覽器和CDN通訊,您的內容可以緩存多長時間。在函數中,您可以這樣設置Cache-Control

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

在此示例標頭中,偽指令執行三件事:

  • public —將緩存標記為public 。這意味著瀏覽器中間服務器(即Firebase託管的CDN)都可以緩存內容。

  • max-age age-告訴瀏覽器和CDN他們可以緩存內容的秒數。設置的時間到期後,瀏覽器和CDN必須使用原始服務器重新驗證內容。在示例標題中,我們允許瀏覽器和CDN將內容緩存五分鐘(有關CDN緩存的特定控件,請參見下面的s-maxage )。

  • s-maxage —僅對CDN緩存覆蓋max-age指令;告訴CDN它可以緩存內容多少秒。設置的時間到期後,CDN必須使用原始服務器重新驗證內容。在示例標題中,我們僅覆蓋CDN的 max-age設置,並允許CDN將內容緩存十分鐘。

對於max-ages-maxage ,將其值設置為您對接收過時內容的用戶感到滿意的最長時間。如果頁面每隔幾秒鐘更改一次,請使用較小的時間值。但是,其他類型的內容可以安全地緩存數小時,數天甚至數月。

您可以在Mozilla開發人員網絡和Google的Web開發人員文檔中了解有關Cache-Control標頭的更多信息。

何時提供緩存的內容?

瀏覽器和CDN根據以下內容緩存您的內容:

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

各種標題

Vary標頭確定應使用哪些請求標頭來提供適當的響應(緩存的內容是否有效,或者是否應使用原始服務器重新驗證內容)。

大多數時候,您不必擔心Vary標頭。在常見情況下,Firebase託管Vary在響應中自動設置適當的Vary標頭。這包括確保將您正在使用的任何會話cookie或授權標頭都設置為緩存鍵的一部分,以防止意外洩漏內容。

在某些高級用例中,可能需要其他標題來影響緩存。在這種情況下,您只需在響應中設置Vary標頭即可:

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

使用這些設置,將分別緩存兩個具有不同X-My-Custom-Header頭的原本相同的請求。

使用cookie

將Firebase Hosting與Cloud Functions或Cloud Run一起使用時,通常會從傳入請求中刪除Cookie。這對於允許有效的CDN 緩存行為是必需的。僅允許使用專門命名的__session cookie來執行您的應用程序。

如果存在,則__session cookie會自動成為緩存鍵的一部分,這意味著具有不同cookie的兩個用戶不可能接收到對方的緩存響應。僅當您的應用根據用戶授權提供不同的內容時,才使用__session cookie。