在cloudFront中混淆了最小,最大和默认TTL
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在cloudFront中混淆了最小,最大和默认TTL相关的知识,希望对你有一定的参考价值。
我在S3中使用了我的Web应用程序,并使用cloudFront的Web分发服务该应用程序。我给了official documentation一个阅读,但与许多术语混淆。
我的问题:
- 我想将cloudFront缓存设置为最长1年(365天)。为此,我该怎么办? (我们是否必须为S3中的每个对象设置标题?)
我遇到了头缓存控件,发现如果cloudFront返回带有值的头,那么能够缓存的浏览器将缓存给定值的对象。
- 如何在cloudFront中设置缓存控制头,以便在用户的浏览器中缓存对象?
- 是否有任何工具可以检查S3和cloudFront部署,即返回的标头?
因此,相对于缓存头很容易调试。
@Udo回答后更新。这是我的请求和响应标头的屏幕截图。
CloudFront不会添加Cache-Control
标头。如果源服务器提供它,它会将其传递给浏览器。
如果在将对象上传到S3时未设置Cache-Control
标头,则需要再次上传对象或进入S3控制台并将标头添加到对象中,如果希望浏览器缓存,则值为max-age=31536000
对象长达一年。
如果将CloudFront配置为“使用原始缓存标头”,则CloudFront将使用Cache-Control
中的max-age值来确定可以在CloudFront缓存对象的时间,除非s-maxage
值也存在,在这种情况下,CloudFront将使用相反。
如果配置min / max / default,CloudFront将使用这些计数器来确定缓存对象的时间长度:
- minimum:对象可以缓存至少这么长,即使
Cache-Control: max-age
(或s-maxage
,如果存在)具有较低的值。实际上,将Minimum TTL设置为非零值会导致CloudFront忽略Cache-Control
指令no-cache
,no-store
和private
,并将它们缓存到最小TTL值 - 在您希望浏览器看到这些值但仍然存在的情况下非常有用希望CloudFront缓存对象。 - maximum:对象不会被缓存超过此值,即使
Cache-Control: max-age
具有更高的值。 - 默认值:如果在对象上看不到
Cache-Control
,则对象可以缓存这么久。你不应该需要这个,因为你应该在任何地方都有Cache-Control
标题。
有关这些设置的重要注意事项:
- 它们仅影响CloudFront缓存,而不影响浏览器缓存。
- 一旦CloudFront缓存了一个对象,它就无法知道该对象在S3中已被更改。在计时器到期之前,它可能不会再次检查。
- 通过在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标头也很有用。
以上是关于在cloudFront中混淆了最小,最大和默认TTL的主要内容,如果未能解决你的问题,请参考以下文章