缓存概览

可缓存响应是一种可供 Cloud CDN 存储并快速检索,因而有助于缩短加载时间的 HTTP 响应。并非所有 HTTP 响应都可以缓存。

缓存模式

使用缓存模式,您可以控制用于确定 Cloud CDN 是否缓存内容的因素。

Cloud CDN 提供三种缓存模式,其中定义了响应的缓存方式、Cloud CDN 是否遵循源站发送的缓存指令,以及缓存 TTL 的应用方式。

下表显示了可用的缓存模式:

缓存模式 行为
CACHE_ALL_STATIC 自动缓存包含不是不可缓存静态内容的成功响应。设置有效缓存指令的源站响应也会进行缓存。

对于使用 Google Cloud CLI 或 REST API 创建的启用了 Cloud CDN 的后端,这是默认行为。

USE_ORIGIN_HEADERS 要求成功的源站响应设置有效的缓存指令和有效的缓存标头。没有这些指令的成功响应会从源站转发。
FORCE_CACHE_ALL 无条件缓存成功响应,并跳过源站设置的任何缓存指令。如果后端传送每个用户的非公开(可识别用户个人身份信息)内容(例如动态 HTML 或 API 响应),则此模式不适用。

即使缺少有效的缓存指令,错误响应也可能缓存

在将缓存模式设置为 FORCE_CACHE_ALL 之前,请考虑以下行为:

  • 对于签名网址或签名 CookieFORCE_CACHE_ALL 会替换通过 Google Cloud 控制台中的缓存条目存在时间上限设置或 gcloud --signed-url-cache-max-age 选项指定的存在时间上限。

  • FORCE_CACHE_ALL 会更改任何先前缓存内容的存留时间 (TTL)。此更改可能会导致某些之前被视为新鲜的条目(由于源标头中的 TTL 较长)被视为过时,并可能导致某些之前被视为过时的条目被视为新鲜。

  • FORCE_CACHE_ALL 会替换缓存指令(Cache-ControlExpires),但不会替换其他源响应标头。特别是,即使缓存模式为 FORCE_CACHE_ALLVary 标头也可能会禁止缓存。如需了解详情,请参阅 Vary 标头

如需查看设置说明,请参阅设置缓存模式

静态内容

静态内容是始终相同的内容,即使由不同的用户访问这些内容也是如此。用于给网站设置样式的CSS 以及用于提供交互性、视频和图片内容的 JavaScript,通常不会针对每个用户更改给定网址(缓存键),因此可以从 Cloud CDN 的全球边缘网络缓存受益。

如果您将缓存模式设置为 CACHE_ALL_STATIC,并且响应在 Cache-ControlExpires 标头中没有显式缓存指令,则 Cloud CDN 会自动缓存以下内容的该响应:

  • Web 资源,包括 CSS (text/css)、JavaScript (application/javascript) 以及包括 WOFF2 (font/woff2) 在内的所有 Web 字体
  • 图片,包括 JPEG (image/jpg) 和 PNG (image/png)
  • 视频,包括 H.264、H.265 和 MP4 (video/mp4)
  • 音频文件,包括 MP3 (audio/mpeg) 和 MP4 (audio/mp4)
  • 格式化文档,包括 PDF 文件 (application/pdf)

下表进行了总结。

类别 MIME 类型
Web 资源 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 类型

注意事项:

  • 您的源站 Web 服务器软件必须为每个响应设置 Content-Type。许多 Web 服务器会自动设置 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 响应。但是,负缓存(如果启用)仍可能会导致它们针对某些状态代码进行缓存。

Cloud CDN 不会使用网址路径中的文件扩展名来确定响应是否可缓存,因为很多有效的可缓存响应没有反映在网址中。

可缓存的内容

Cloud CDN 会缓存满足本部分所列全部要求的响应。其中一些要求是 RFC 7234 中规定的,而其他要求则专门针对 Cloud CDN。

Cloud CDN 可能会定期更改其用于缓存内容的具体条件集。如果要明确阻止 Cloud CDN 缓存您的内容,请遵循 RFC 7234 中的准则,以确定如何指定保证不可缓存的响应。另请参阅基于源标头的不可缓存内容部分。

如果满足以下所有条件,则 Cloud CDN 会将响应存储在缓存中:

属性 要求
来源 已启用 Cloud CDN 的后端服务、后端存储桶或外部后端
所响应的请求 GET 请求
状态代码

200203204206300301302307308404405410421451501

时效性

响应具有含 max-ages-maxage 指令的 Cache-Control 标头,或者具有带未来时间戳的 Expires 标头。

对于没有存在时间的可缓存响应(例如具有