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

上次更新时间:2021 年 11 月 24 日

我想指定 Amazon CloudFront 分配缓存对象的时间长度,因此在源上添加了 Cache-Control 或 Expires 标头。但是,CloudFront 并未按我指定的时间长度缓存对象,或者根本未进行任何缓存。为什么会发生这种情况?

解决方法

请确认您在 Cache-Control 或 Expires 标头中设置的指令不会相互冲突。作为最佳实践,请使用 Cache-Control max-age 指令,而不使用 Expires 标头。如果您同时指定了这两个值,则 CloudFront 仅使用您为 Cache-Control max-age 设置的值

此外,验证您在 CloudFront 分配上设置的 Minimum TTL (最小 TTL)、Default TTL (原定设置 TTL) 和 Maximum TTL (最大 TTL) 与 Cache-Control 或 Expires 标头不冲突。

如果这些缓存持续时间设置相互冲突,则 CloudFront 可能不会在设置的时间内缓存对象,或者 CloudFront 可能根本不会缓存。避免出现如下缓存时间长度设置不一致的情况:

  • 如果将“Maximum TTL”(最大 TTL) 设置为 5 分钟(300 秒)并将 Cache-Control max-age 标头设置为 1 小时(3600 秒),则 CloudFront 缓存对象的持续时间将为 5 分钟,而不是 1 小时。
  • 如果将 Cache-Control max-age 标头设置为 3 小时并将 Expires 标头设置为 1 个月,则 CloudFront 缓存对象的持续时间将为 3 小时,而不是 1 个月。
  • 如果将“Default TTL”(原定设置 TTL)、“Minimum TTL”(最小 TTL) 和“Maximum TTL”(最大 TTL) 设置为 0 秒,则 CloudFront 将始终验证它是否拥有来自源的最新内容。

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


这篇文章对您有帮助吗?


您是否需要账单或技术支持?