我有一个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要缓存它?
是否存在隐藏的默认缓存设置?
发布于 2018-11-05 13:25:23
诚然,控制台呈现的方式非常混乱,甚至不能“正确”。
CloudFront总是使用原始缓存头,和总是使用Min/Default/Max。
使用Origin 的意思实际上是“使用带有标准CloudFront默认值和边界值的源缓存头”。
定制实际上意味着“使用带有自定义CloudFront默认值和边界值的源缓存头”。
因此,没有Cache-Control的对象在默认情况下最多缓存Default TTL - 86400秒。如果不想要这种行为,请切换到Customize,并将Default TTL设置为希望CloudFront用作对象TTL的值(如果头部中没有提取Cache-Control值)。
如果存在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
https://stackoverflow.com/questions/53153278
复制相似问题