我想指定 Amazon CloudFront 分配缓存对象的时间长度,因此在源上添加了 Cache-Control 或 Expires 标头。但是,CloudFront 并未按我指定的时间长度缓存对象,或者 CloudFront 根本未进行缓存。
解决方法
确认您在 Cache-Control 或 Expires 标头中设置的指令不会相互冲突。最佳做法是使用 Cache-Control max-age 指令,而不是 Expires 标头。如果您为两者都指定了值,则 CloudFront 仅使用您为 Cache-Control max-age 设置的值。
确认您在 CloudFront 分配中设置的最小 TTL、默认 TTL 和最大 TTL 与 Cache-Control 或 Expires 标头不冲突。
如果这些缓存持续时间设置相互冲突,则 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-age 或 Expires,则 CloudFront 将按默认 TTL 持续时间缓存对象。
**重要事项:**如果您更新了含有缓存标头的源资产,则 CloudFront 将仅在向您的源发出新请求后反映更改。缓存的资产在边缘站点过期时,CloudFront 会向您的源发出新的请求。然后,您的分配会收到新的资产请求。要强制 CloudFront 在缓存的资产设置为过期之前反映更新,请使缓存失效。
相关信息
对象缓存
管理内容保留在缓存中的时间长度(过期)
控制 CloudFront 缓存错误的时间长度