我想指定 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 可能不会按照您在 Cache-Control 或 Expires 标头上设置的时间长度缓存对象,甚至根本不会缓存。避免出现如下缓存时间长度设置不一致的情况:

  • 如果将“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 在缓存资产的设定过期时间前反映更新,您可以使缓存失效


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2018 年 4 月 9 日

更新时间:2019 年 3 月 24 日