首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么CloudFront缓存s3对象,即使没有任何缓存设置?

为什么CloudFront缓存s3对象,即使没有任何缓存设置?
EN

Stack Overflow用户
提问于 2018-11-05 11:13:22
回答 1查看 271关注 0票数 0

我有一个CloudFront发行版,它的起源是s3桶。

发行版使用Use Origin Cache Headers设置。

附加设置如下所示。

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

代码语言:javascript
运行
复制
$ 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要缓存它?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53153278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档