Amazon s3 为什么CloudFront缓存s3对象即使没有';没有任何缓存设置吗?

Amazon s3 为什么CloudFront缓存s3对象即使没有';没有任何缓存设置吗?,amazon-s3,amazon-cloudfront,Amazon S3,Amazon Cloudfront,我有一个CloudFront发行版,以s3bucket作为起点 发行版正在使用Use Origin Cache Headers设置 附加设置如下所示 之后,我通过S3控制台上传一个文件,并尝试使用curl获取该文件(当然,没有缓存控制元数据) 我希望所有请求都应该返回缓存未命中,因为没有任何缓存设置(CloudFront和S3对象元数据)。但是,正如您所看到的,第二个请求返回缓存命中 为什么CloudFront会缓存它 是否有任何隐藏的默认缓存设置 控制台呈现这一点的方式无疑非常令人困惑,甚

我有一个
CloudFront
发行版,以
s3
bucket作为起点

发行版正在使用
Use Origin Cache Headers
设置

附加设置如下所示

之后,我通过
S3
控制台上传一个文件,并尝试使用
curl
获取该文件(当然,没有
缓存控制
元数据)

我希望所有请求都应该返回
缓存未命中
,因为没有任何缓存设置(CloudFront和S3对象元数据)。但是,正如您所看到的,第二个请求返回
缓存命中

为什么CloudFront会缓存它


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

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

CloudFront始终使用原始缓存头始终使用最小/默认/最大TTL

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

自定义实际上意味着“使用具有自定义CloudFront默认值和边界值的源缓存头”

因此,没有
缓存控制的对象在默认情况下最多会被缓存86400秒。如果不希望出现这种行为,请切换到
Customize
,并将
Default TTL
设置为希望CloudFront用作对象TTL的值,前提是标头中没有
Cache Control


如果存在
缓存控制
,CloudFront将忽略
默认TTL
,而是使用边界值
最小TTL
最大TTL
,以确定是否应在内部使用原点的
缓存控制
值,或覆盖它们。如果超出范围,CloudFront会调整其内部计时器,使对象的TTL在范围>=
最小TTL
(默认0秒)内,控制台显示的方式无疑非常混乱,甚至可能不“正确”

CloudFront始终使用原始缓存头始终使用最小/默认/最大TTL

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

自定义实际上意味着“使用具有自定义CloudFront默认值和边界值的源缓存头”

因此,没有
缓存控制的对象在默认情况下最多会被缓存86400秒。如果不希望出现这种行为,请切换到
Customize
,并将
Default TTL
设置为希望CloudFront用作对象TTL的值,前提是标头中没有
Cache Control


如果存在
缓存控制
,CloudFront将忽略
默认TTL
,而是使用边界值
最小TTL
最大TTL
,以确定是否应在内部使用原点的
缓存控制
值,或覆盖它们。如果超出范围,CloudFront会调整其内部计时器,使对象的TTL处于范围>=
最小TTL
(默认0秒)内,我看到的行为与此相矛盾。我创建了一个带有默认设置(即对象缓存设置=使用源缓存头)的CF发行版,并且我的S3源没有附加任何缓存头。然而,CF似乎不仅缓存了文件,它甚至在24小时后都没有过期,因为我在S3中更新了文件已经超过24小时了,而且CF仍然没有接收到它。有什么想法吗?我看到的行为与此相矛盾。我创建了一个带有默认设置(即对象缓存设置=使用源缓存头)的CF发行版,并且我的S3源没有附加任何缓存头。然而,CF似乎不仅缓存了文件,它甚至在24小时后都没有过期,因为我在S3中更新了文件已经超过24小时了,而且CF仍然没有接收到它。有什么想法吗?
$ curl -X GET https://xxxxxxxxxxx/file -v
.
.
X-Cache: Miss from cloudfront
.
.
.
$ curl -X GET https://xxxxxxxxxxx/file -v
.
.
X-Cache: Hit from cloudfront.
.
.