快取總覽

可快取的回應是指 Cloud CDN 可儲存並快速擷取的 HTTP 回應,因此載入速度較快。並非所有 HTTP 回應都可以快取。

快取模式

您可以透過快取模式,控管 Cloud CDN 用來判斷是否要快取內容的要素。

Cloud CDN 提供三種快取模式,可定義回應的快取方式、Cloud CDN 是否會遵守來源傳送的快取指令,以及快取存留時間的套用方式。

下表列出可用的快取模式:

快取模式 行為
CACHE_ALL_STATIC 自動快取含有靜態內容的成功回應,且該靜態內容在其他情況下並非無法快取。這項模式也會快取已設定有效快取指令的來源回應。

若後端已啟用 Cloud CDN,且是使用 Google Cloud CLI 或 REST API 建立,則會「預設」採用此行為。

USE_ORIGIN_HEADERS 成功的來源回應須設定有效快取指令和有效快取標頭。如果成功的回應不含這些指令,則會從來源轉送。
FORCE_CACHE_ALL 無條件快取成功的回應,覆寫來源所設定的任何快取指令。如果後端提供個別使用者 (可識別使用者身分) 的私人內容,例如動態 HTML 或 API 回應,就不適合使用這個模式。

即使不含有效的快取指令,錯誤回應也可能會快取

將快取模式設為 FORCE_CACHE_ALL 前,請先瞭解下列行為:

  • 如果是已簽署的網址或 Cookie,則透過 Google Cloud 控制台的「Cache entry maximum age」(快取項目存在時間長度上限) 設定或 gcloud --signed-url-cache-max-age 選項所指定的存在時間長度上限,會由 FORCE_CACHE_ALL 覆寫。

  • FORCE_CACHE_ALL 會變更先前快取內容的存留時間 (TTL)。這項變更可能會導致先前視為較新 (因來源標頭的存留時間較長) 的項目變成過時,而先前視為過時的項目則變成較新。

  • FORCE_CACHE_ALL 會覆寫快取指令 (Cache-ControlExpires),但不會覆寫其他來源回應標頭。特別是,即使快取模式為 FORCE_CACHE_ALLVary 標頭仍可能禁止快取。詳情請參閱「Vary 標頭」。

如需設定操作說明,請參閱「設定快取模式」。

靜態內容

靜態內容是指即使由不同使用者存取,內容一律相同。用來設定網站樣式的 CSS、提供互動性的 JavaScript,以及影片和圖片內容,通常不會因指定網址 (「快取金鑰」) 的使用者而異,因此可透過 Cloud CDN 的全球邊緣網路快取。

將快取模式設為 CACHE_ALL_STATIC 時,如果回應的 Cache-ControlExpires 標頭沒有明確的快取指令,Cloud CDN 會「自動」為下列項目快取回應:

  • 網路資產,包括 CSS (text/css)、JavaScript (application/javascript) 和所有網頁字型,包括 WOFF2 (font/woff2)
  • 圖片,包括 JPEG (image/jpg) 和 PNG (image/png)
  • 影片,包括 H.264、H.265 和 MP4 (video/mp4)
  • 音訊檔案,包括 MP3 (audio/mpeg) 和 MP4 (audio/mp4)
  • 格式化文件,包括 PDF (application/pdf)

下表提供摘要資訊。

類別 MIME 類型
網路資產 text/css text/ecmascript text/javascript application/javascript
字型 任何符合 font/*Content-Type
圖片 任何符合 image/*Content-Type
影片 任何符合 video/*Content-Type
音訊 任何符合 audio/*Content-Type
格式化文件類型 application/pdfapplication/postscript

Cloud CDN 會檢查 Content-Type HTTP 回應標頭,該標頭會反映所提供內容的 MIME 類型

注意事項:

  • 來源的網路伺服器軟體必須為每個回應設定 Content-Type。許多網路伺服器會自動設定 Content-Type 標頭,包括 NGINX、Varnish 和 Apache。

  • 使用 Google Cloud 控制台或 Google Cloud CLI 上傳內容時,Cloud Storage 會自動設定 Content-Type 標頭。

  • Cloud Storage 一律會向 Cloud CDN 提供 Cache-Control 標頭。如果沒有明確選擇值,則會傳送預設值。因此,除非您明確調整 Cloud Storage 物件的快取控制中繼資料,或使用 FORCE_CACHE_ALL 模式覆寫 Cloud Storage 傳送的值,否則所有成功的 Cloud Storage 回應都會根據 Cloud Storage 預設值快取。

  • 如要快取 text/htmlapplication/json 內容類型,您必須在回應中設定明確的 Cache-Control 標頭,並注意不要不小心快取某位使用者的資料,然後提供給所有使用者。

如果回應的 MIME 類型可供快取,但 Cache-Control 回應標頭為 privateno-store,或是 Set-Cookie 標頭,則不會快取。詳情請參閱「可快取性規則」。

根據預設,系統不會為成功的回應快取其他內容類型,例如 HTML (text/html) 和 JSON (application/json)。這類回應通常是動態回應,會因使用者而異,例如購物車、含使用者個人化服務的產品頁面,以及已驗證的 API 回應。不過,如果啟用 negative caching,系統仍可能根據特定狀態碼快取這類回應。

Cloud CDN 不會使用網址路徑中的副檔名判斷回應是否可快取,因為許多有效且可快取的回應不會反映在網址中。

可快取的內容

Cloud CDN 會快取符合本節所有條件的回應。部分條件是由 RFC 7234 指定,其他則是 Cloud CDN 特有的條件。

Cloud CDN 可能會定期變更快取內容的確切條件組合。如要明確禁止 Cloud CDN 快取內容,請按照 RFC 7234 的指南,判斷如何指定保證無法快取的回應。另請參閱「根據來源標頭無法快取的內容」一節。

如果符合下列所有條件,Cloud CDN 就會將回應儲存在快取中。

屬性 條件
提供者 已啟用 Cloud CDN 的後端服務、後端 bucket 或外部後端