为什么 Amazon CloudFront 不按我指定的时间长度缓存文件?

1 分钟阅读
0

我想指定 Amazon CloudFront 分配缓存对象的时间长度,因此在源上添加了 Cache-Control 或 Expires 标头。但是,CloudFront 并未按我指定的时间长度缓存对象,或者 CloudFront 根本未进行缓存。

解决方法

确认您在 Cache-ControlExpires 标头中设置的指令不会相互冲突。最佳做法是使用 Cache-Control max-age 指令,而不是 Expires 标头。如果您为两者都指定了值,则 CloudFront 仅使用您为 Cache-Control max-age 设置的值

确认您在 CloudFront 分配中设置的最小 TTL默认 TTL最大 TTLCache-ControlExpires 标头不冲突。

如果这些缓存持续时间设置相互冲突,则 CloudFront 可能不会在设定的时间内缓存对象,或者 CloudFront 可能根本不会缓存。避免这些相互冲突的缓存持续时间设置示例:

  • 最大 TTL 设置为 5 分钟(300 秒),Cache-Control max-age 标头设置为 1 小时(3600 秒)。在这种情况下,CloudFront 会将对象缓存 5 分钟,而不是 1 小时。
  • Cache-Control max-age 标头设置为 3 小时,Expires 标头设置为 1 个月。在这种情况下,CloudFront 会将对象缓存 3 小时而不是 1 个月。
  • 默认、最小和最大 TTL 设置为 0 秒。在这种情况下,CloudFront 始终会验证是否包含来自源的最新内容。
  • 最小 TTL 设置为 60 秒,默认 TTL 设置为 300 秒,最大 TTL 设置为 3600 秒。如果源不提供缓存标头,例如 Cache-Control max-ageExpires,则 CloudFront 将按默认 TTL 持续时间缓存对象。

**重要事项:**如果您更新了含有缓存标头的源资产,则 CloudFront 将仅在向您的源发出新请求后反映更改。缓存的资产在边缘站点过期时,CloudFront 会向您的源发出新的请求。然后,您的分配会收到新的资产请求。要强制 CloudFront 在缓存的资产设置为过期之前反映更新,请使缓存失效

相关信息

对象缓存

管理内容保留在缓存中的时间长度(过期)

控制 CloudFront 缓存错误的时间长度

AWS 官方
AWS 官方已更新 8 个月前