Caching 如何正确设置Amazon CloudFront缓存

Caching 如何正确设置Amazon CloudFront缓存,caching,amazon-s3,amazon-cloudfront,Caching,Amazon S3,Amazon Cloudfront,我使用S3来存储一组图像,并使用CloudFront来缓存它们。我遇到的问题是,我的图像没有被正确缓存 如果我通过CloudFront链接检查图像的标题,它将在第一次尝试时显示未命中,并在随后的所有尝试中显示命中。这是正常的,但如果我关闭浏览器,离开几小时,再试一次,就会显示未命中。因此,这表明它只是在短时间内得到缓存 以下是cdn上的示例图像: 一种奇怪的行为是,如果您尝试用嗅探器嗅探标题,您每次都会看到遗漏。尽管缓存控件是公共的,但最大使用年限为315360000,并且设置为10年后过期 什

我使用S3来存储一组图像,并使用CloudFront来缓存它们。我遇到的问题是,我的图像没有被正确缓存

如果我通过CloudFront链接检查图像的标题,它将在第一次尝试时显示未命中,并在随后的所有尝试中显示命中。这是正常的,但如果我关闭浏览器,离开几小时,再试一次,就会显示未命中。因此,这表明它只是在短时间内得到缓存

以下是cdn上的示例图像:

一种奇怪的行为是,如果您尝试用嗅探器嗅探标题,您每次都会看到遗漏。尽管缓存控件是公共的,但最大使用年限为315360000,并且设置为10年后过期

什么是在cloudfront上缓存10年的正确方法?有没有我遗漏的额外标题


编辑:这里是imgur上的比较。他们使用cloudflare,但我看到他们的行为是正确的。一旦它被缓存,我就再也看不到我的任何电脑或附近的位置有任何遗漏。我的头和他们的头都很相似,只是有一些(不重要的)区别。非常感谢您的帮助。

可能是您将最小TTL设置为非默认值,并且它将在该时间段内缓存它,而不是缓存控制标头中的任何内容。我认为这不太可能,因为您可能已经想到了这一点,而且因为发行版似乎尊重缓存控制:没有缓存(如果最小TTL不是默认值,则不会)

更有可能的是,cloudfront只是在一段时间后收回您的项目:

如果不经常请求边缘位置中的对象, CloudFront可能会逐出该对象,并在其运行之前移除该对象 为更流行的对象腾出空间的过期日期

-从


至于web-sniffer.net,您会注意到它发送了一个缓存控件:no Cache header,这将使cloudfront从源站获取数据。

谢谢您的帮助。我不认为驱逐正在发生,因为我正在用相对较新的文件进行测试。看起来CF至少要等一段时间(几个月?)才能做这样的事情。另外:如果你尝试网络嗅探器,你会发现它每次都很流行。看起来我的头和他们的头很相似,而且都在CloudFront上。你说得对,我在自己通过cf提供的文件上尝试了这个方法,结果很成功。你能发布源对象的URL吗?Alex,这是。如果你需要,我可以给你更多的信息。当我上传文件时,我将“缓存控制”和“过期”设置为10年。谢谢。我在你面前设置了另一个默认分发版,并设法让web-sniffer.net每次都显示缓存命中率(在几次未命中后)。这让我怀疑发生的一切都是因为您的分发设置。您的配置中有没有非默认的配置?非常有趣。我没有做任何超出默认值的事情。我可以继续设置另一个。我会将所有内容保留为默认设置,并将其张贴在此处。