我有一个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缓存它?
是否存在任何隐藏的默认缓存设置?
答案 0 :(得分:2)
控制台呈现这种方式的方式令人困惑,甚至说不上是“正确的”。
CloudFront始终使用原始缓存标头,始终使用最小/默认/最大TTL。
使用Origin Cache Headers 实际上是指“使用具有标准CloudFront默认值和边界值的Origin Cache Headers。”
自定义实际上是指“使用具有自定义CloudFront默认值和边界值的Origin Cache标头。”
因此,默认情况下,没有Cache-Control
的对象最多可以缓存Default TTL
-86400秒。如果您不希望出现这种情况,请切换到Customize
并将Default TTL
设置为您希望CloudFront用作对象TTL的值(如果标头中没有Cache-Control
的值未提供)。 / p>
如果存在Cache-Control
,则CloudFront会忽略Default TTL
,而是使用边界值Minimim TTL
和Maximum 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