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.
.
.