CDN加速

文档中心 CDN Pro 如何决定一个文件能否缓存,缓存多久?

如何决定一个文件能否缓存,缓存多久?

更新时间:2022-06-16 17:57:37

CDN Pro 如何决定一个文件是否缓存,缓存多久?

在边缘逻辑(Edge Logic)中,我们提供了多个指令用于设置文件是否应在CDN Pro上缓存(例如 proxy_no_cache / proxy_ignore_cache_control / proxy_ignore_headers 等等)。如果加速项目中没有配置使用任何相关指令,那么CDN Pro节点的默认行为为“遵循源站”,即按照源站响应头中的 Cache-ControlExpires 头来决定文件是否可以缓存以及缓存的时长。此处需要注意的是,如果源站返回的响应头中包含 Set-Cookie 头部,则CDN Pro将不会对该文件进行缓存。

与此同时,我们基于开源 NGINX 做了优化,让CDN Pro严格遵循有关“零时缓存”的 HTTP 标准: 如果源站的 Cache-Control 响应头中包含 no-cachemax-age=0 ,则文件仍会被CDN Pro缓存但CDN Pro会判断其立即过期。对该文件对象的后续请求将触发CDN Pro携带 If-Modified-Since 头部对源发起重新验证。如果源站的 Cache-Control 响应头为 no-store,则该文件不会被缓存。

HTTP协议规定:Date 响应头应保存源站生成响应的时间。因此,在默认情况下,来自源站的 Date 响应头会被一路透传至客户端。类似的处理规则也被运用到了响应头 Age 中。因此,即使请求经过了多层级 Cache 代理,CDN Pro 平台上的 Age 头也可正确反映文件从源上取回后经过了多长时间。

如果您想修改上述CDN Pro的默认缓存规则,您可以使用本文开头列出的几个指令来改写缓存规则。

  • 指令 proxy_ignore_headers :用于让 CDN Pro 强制忽略源站的Cache-Control / Expire / Set-Cookie三个头部。例如,以下配置示例中,CDN Pro 将按照源站未提供 Set-Cookie 响应头来判断文件是否可以缓存以及缓存时间:
proxy_ignore_headers Set-Cookie;
  • 指令 proxy_cache_valid :用于设置当源站未提供缓存规则(例如 Cache-Control / Expire / Set-Cookie三个头部)或者 CDN Pro忽略源站的响应头部 Cache-Control / Expire / Set-Cookie时,对不同状态码的文件设置不同缓存时长。例如:
location / { # 默认 location
    proxy_cache_valid 5m; # 针对200、301、302状态码请求缓存5分钟
    proxy_cache_valid 404 2m; # 针对404状态码请求缓存2分钟
}
location /no-cache {
    proxy_cache_valid 200 0; # 针对200状态码进行缓存,但是该立即过期
}
proxy_ignore_cache_control no-cache no-store; # 忽略源给的 Cache-Control 响应头中的 no-cache 和 no-store
  • 指令 proxy_cache_min_age :用于设置 CDN Pro 文件缓存时间的最小值。当源站给的 Cache-Control 头中的 max-age 值小于指令 proxy_cache_min_age 的配置值时,该 max-age 将被 CDN Pro 忽略,同时 CDN Pro 将以该指令配置值作为文件的可缓存时间。

  • 指令 proxy_cache_bypass :用于设置 CDN Pro 不响应缓存文件给客户端,而是每次都从源站获取文件。该指令经常与 proxy_no_cache 一起使用,以此达到“强制文件不缓存”的效果。

  • 指令 proxy_no_cache :用于设置 CDN Pro 从源站拿到文件后不缓存到本地。该指令经常与 proxy_cache_bypass 一起使用,以达到“强制文件不缓存”的效果。

除了本文章介绍的CDN Pro缓存行为之外,您也可以阅读以下两篇文章,来了解更多的CDN Pro缓存处理规则:

本篇文档内容对您是否有帮助?
有帮助
没帮助
提交成功!非常感谢您的反馈,我们会继续努力做到更好!