可快取的回應是指 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-Control和Expires),但不會覆寫其他來源回應標頭。特別是,即使快取模式為FORCE_CACHE_ALL,Vary標頭仍可能禁止快取。詳情請參閱「Vary 標頭」。
如需設定操作說明,請參閱「設定快取模式」。
靜態內容
靜態內容是指即使由不同使用者存取,內容一律相同。用來設定網站樣式的 CSS、提供互動性的 JavaScript,以及影片和圖片內容,通常不會因指定網址 (「快取金鑰」) 的使用者而異,因此可透過 Cloud CDN 的全球邊緣網路快取。
將快取模式設為 CACHE_ALL_STATIC 時,如果回應的 Cache-Control 或 Expires 標頭沒有明確的快取指令,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/pdf 和 application/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/html和application/json內容類型,您必須在回應中設定明確的Cache-Control標頭,並注意不要不小心快取某位使用者的資料,然後提供給所有使用者。
如果回應的 MIME 類型可供快取,但 Cache-Control 回應標頭為 private 或 no-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 或外部後端 |