首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >混淆了cloudFront中的最小、最大和默认时间间隔

混淆了cloudFront中的最小、最大和默认时间间隔
EN

Stack Overflow用户
提问于 2017-04-11 18:47:12
回答 1查看 1.9K关注 0票数 5

我的web应用程序在S3中,并使用cloudFront的Web发行版提供服务。我读了一下official documentation,但是把很多术语搞糊涂了。

我的问题:

  1. 我要将cloudFront缓存设置为最大1年(365天)。要做到这一点,我必须做什么?(我们是否必须在S3中为每个对象设置标头?)

我遇到了头cache-control,,我发现如果cloudFront返回这样一个头和一个值,那么能够缓存的浏览器将缓存给定值的对象。

  1. 如何在cloudFront中设置缓存控制标头,以便在用户的浏览器中缓存对象?
  2. 是否有工具可以检查S3 & cloudFront部署,即返回的标头?

因此,对于缓存头,将很容易进行调试。

在@Udo回答之后更新。这是我的请求和响应头的屏幕截图。

EN

回答 1

Stack Overflow用户

发布于 2017-04-12 09:52:22

CloudFront不添加Cache-Control报头。如果源服务器提供它,它会将它传递给浏览器。

如果您在将对象上传到Cache-Control时没有设置S3标头,那么您将需要再次上传您的对象,或者进入S3控制台并将标头添加到对象中,如果您希望浏览器缓存该对象长达一年的时间,则使用值max-age=31536000

如果您将CloudFront配置为“使用原始缓存头”,那么CloudFront将使用来自Cache-Control的最大年龄值来确定对象可以在CloudFront缓存多长时间,除非s-maxage值也在那里,在这种情况下,CloudFront将使用该值。

如果配置了最小/最大/默认值,CloudFront将使用这些计数器来确定对象可以缓存的时间:

  • 最小值:即使Cache-Control: max-age (或s-maxage,如果存在)具有较低的值,对象也可能被缓存至少这么长时间。实际上,将Minimum Ttl值设置为非零值会导致CloudFront忽略Cache-Control指令no-cacheno-storeprivate,并将它们缓存到最小Ttl值--如果您希望浏览器看到这些值,但您仍然希望CloudFront缓存这些值,那么缓存Cache-Control: max-age对象的时间就不会超过这个值,即使Cache-Control: max-age具有更高的TTL,如果在对象上看不到Cache-Control,则可能会缓存对象这么长的时间。您不应该需要这个,因为您应该到处都有Cache-Control标头。

关于这些设置需要注意的重要事项:

  • 它们只影响CloudFront缓存,而不影响浏览器缓存。
  • 一旦对象被CloudFront缓存,它就无法知道该对象在S3中是否已更改。在定时器expires.
  • There尝试通过在CloudFront中设置过长的时间(例如一年)来“强制”CloudFront在缓存中长时间保留一个对象之前,它可能不会再次检查,因为CloudFront可以出于任何原因随时从其缓存中清除任何对象--缓存本质上是易失性的。对象的流行度(或缺乏流行度)可能会触发CloudFront在计时器到期之前清除它。在下一次请求时,它将由CloudFront从源位置获取。

同样重要的是,CloudFront有两个按地理位置组织的缓存层--区域(内部)和边缘(外部)。边缘缓存数量更多,地理分布更广,但区域缓存具有更大的存储容量。如果通过CloudFront获取对象,CloudFront会将该对象缓存在某个地方(一个区域缓存、一个边缘缓存或两者中的一个),但是下一个请求--可能来自不同地理区域中的浏览器--可能会经过以前从未请求过该对象的边缘和区域。另一方面,它可能是通过没有它的边缘请求的,但它将从区域缓存中获取。当您理解任何给定对象在任何给定时间都不能正确地说在缓存中或不在缓存中时,请记住这一点,因为没有“缓存”。世界各地有多个缓存,其中许多不相互通信,因为这会使事情变得更慢,而不是更快。如果您的网站在澳大利亚很流行,但在英国不受欢迎,则您的对象的副本可能会缓存在亚太地区的缓存位置,但不会缓存在西欧的缓存位置。这种行为完全是自动的,不是您配置的,但是您需要知道CloudFront没有单一的整体缓存。对象被缓存在它们被访问的地方。

是否有工具来检查S3 & cloudFront部署,即返回的头

你的眼球是最好的工具。浏览器中的响应头告诉您需要知道的内容:

Age:是CloudFront在其缓存中拥有此对象的时间(以秒为单位)。

X-Cache: Hit from cloudfront意味着CloudFront不必从S3获取对象,因为它已经被缓存了。Miss from cloudfront意味着CloudFront在处理此请求的边缘没有缓存中的对象,需要从S3中获取它。

命令行实用程序curl及其-v选项对于观察web标头也很有用。

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

https://stackoverflow.com/questions/43343759

复制
相关文章

相似问题

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