为什么没有任何缓存设置,CloudFront缓存s3对象仍然存在?

时间:2018-11-05 11:13:22

标签: amazon-s3 amazon-cloudfront

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

分发使用Use Origin Cache Headers设置。

其他设置如下。

enter image description here

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

enter image description here

$ 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缓存它?

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

1 个答案:

答案 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 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