我的web应用程序在S3中,并使用cloudFront的Web发行版提供服务。我读了一下official documentation,但是把很多术语搞糊涂了。
我的问题:
我遇到了头cache-control,,我发现如果cloudFront返回这样一个头和一个值,那么能够缓存的浏览器将缓存给定值的对象。
因此,对于缓存头,将很容易进行调试。
在@Udo回答之后更新。这是我的请求和响应头的屏幕截图。
发布于 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-cache
、no-store
和private
,并将它们缓存到最小Ttl值--如果您希望浏览器看到这些值,但您仍然希望CloudFront缓存这些值,那么缓存Cache-Control: max-age
对象的时间就不会超过这个值,即使Cache-Control: max-age
具有更高的TTL,如果在对象上看不到Cache-Control
,则可能会缓存对象这么长的时间。您不应该需要这个,因为您应该到处都有Cache-Control
标头。关于这些设置需要注意的重要事项:
同样重要的是,CloudFront有两个按地理位置组织的缓存层--区域(内部)和边缘(外部)。边缘缓存数量更多,地理分布更广,但区域缓存具有更大的存储容量。如果通过CloudFront获取对象,CloudFront会将该对象缓存在某个地方(一个区域缓存、一个边缘缓存或两者中的一个),但是下一个请求--可能来自不同地理区域中的浏览器--可能会经过以前从未请求过该对象的边缘和区域。另一方面,它可能是通过没有它的边缘请求的,但它将从区域缓存中获取。当您理解任何给定对象在任何给定时间都不能正确地说在缓存中或不在缓存中时,请记住这一点,因为没有“缓存”。世界各地有多个缓存,其中许多不相互通信,因为这会使事情变得更慢,而不是更快。如果您的网站在澳大利亚很流行,但在英国不受欢迎,则您的对象的副本可能会缓存在亚太地区的缓存位置,但不会缓存在西欧的缓存位置。这种行为完全是自动的,不是您配置的,但是您需要知道CloudFront没有单一的整体缓存。对象被缓存在它们被访问的地方。
是否有工具来检查S3 & cloudFront部署,即返回的头
你的眼球是最好的工具。浏览器中的响应头告诉您需要知道的内容:
Age:
是CloudFront在其缓存中拥有此对象的时间(以秒为单位)。
X-Cache: Hit from cloudfront
意味着CloudFront不必从S3获取对象,因为它已经被缓存了。Miss from cloudfront
意味着CloudFront在处理此请求的边缘没有缓存中的对象,需要从S3中获取它。
命令行实用程序curl
及其-v
选项对于观察web标头也很有用。
https://stackoverflow.com/questions/43343759
复制相似问题