【问题标题】:Why does CloudFront cache s3 object even though there aren't any cache settings?为什么即使没有任何缓存设置,CloudFront 也会缓存 s3 对象?
【发布时间】:2018-11-05 21:25:23
【问题描述】:

我有一个CloudFront 分布,以s3 存储桶作为来源。

分发使用Use Origin Cache Headers设置。

附加设置如下。

之后,我通过S3控制台上传文件,并尝试使用curl获取文件。(当然,没有Cache-Control元数据)

$ curl -X GET https://xxxxxxxxxxx/file -v
.
.
X-Cache: Miss from cloudfront
.
.
.
$ curl -X GET https://xxxxxxxxxxx/file -v
.
.
X-Cache: Hit from cloudfront.
.
.

我希望所有请求都应返回 cache-miss,因为在任何地方都没有缓存设置(CloudFront 和 S3 对象元数据)。但是,如您所见,第二个请求返回的是cache-hit

CloudFront 为什么缓存它?

是否有任何隐藏的默认缓存设置?

【问题讨论】:

    标签: amazon-s3 amazon-cloudfront


    【解决方案1】:

    控制台呈现这一点的方式无疑是非常令人困惑的,甚至可以说是不“正确的”。

    CloudFront 始终使用原始缓存标头并且始终使用 Min/Default/Max TTL。

    使用原始缓存标头实际上意味着“使用具有标准 CloudFront 默认值和边界值的原始缓存标头。”

    自定义实际上意味着“使用带有自定义 CloudFront 默认值和边界值的原始缓存标头。”

    所以默认情况下,没有Cache-Control 的对象最多缓存Default TTL -- 86400 秒。如果您不希望出现这种情况,请切换到 Customize 并将 Default TTL 设置为您希望 CloudFront 用作对象 TTL 的值(如果标头中没有 Cache-Control 值)。

    如果存在Cache-Control,CloudFront 会忽略Default TTL,而是使用边界值Minimim TTLMaximum TTL 来确定它是否应该在内部使用源的Cache-Control 值,或者覆盖它们。如果超出范围,CloudFront 会调整其内部计时器,以便对象的 TTL 在 >= Minimum TTL(默认 0 秒)和 Maximum TTL(1 年)的范围内,将过大的值减少到最大值并增加 -最小的小值。如果Cache-Control 值已经在该范围内,则Cache-Control 中的值将按原样使用。无论哪种方式,CloudFront 都不会实际修改 Cache-Control 标头本身。

    https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html

    【讨论】:

    • 我看到的行为与此相矛盾。我创建了一个具有默认设置的 CF 发行版(即对象缓存设置 = 使用原始缓存标头),并且我的 S3 源没有附加任何缓存标头。然而,CF 不仅似乎缓存了该文件,而且它甚至在 24 小时后都没有过期,因为我在 24 小时前在 S3 中更新了文件并且 CF 仍然没有拾取它。有什么想法吗?
    猜你喜欢
    • 2015-08-24
    • 2020-05-01
    • 2021-10-20
    • 1970-01-01
    • 2019-06-13
    • 2011-06-14
    • 2021-05-18
    • 1970-01-01
    • 2016-02-18
    相关资源
    最近更新 更多