Lak*_*kar 4 browser caching amazon-s3 amazon-web-services amazon-cloudfront
我在S3中拥有我的Web应用程序,并使用cloudFront的Web分发来提供该应用程序。我看了官方文档,但对很多术语感到困惑。
我的问题:
我遇到了标头cache-control,发现如果cloudFront返回带有值的标头,则能够进行缓存的浏览器将为给定值缓存对象。
如何在cloudFront中设置缓存控制标头,以便将对象缓存在用户的浏览器中?
是否有任何工具可以检查S3和cloudFront部署,即返回的标头?
因此,就缓存标头而言,调试起来很容易。
@Udo回答后更新。这是我的请求和响应标题的屏幕截图。
CloudFront的不添加的Cache-Control
头。如果原始服务器提供它,它将通过它传递给浏览器。
如果Cache-Control
在将对象上传到S3时未设置标头,则需要再次上传对象或进入S3控制台并将标头添加到对象,max-age=31536000
如果您希望浏览器缓存该对象,则该值为长达一年。
如果您将CloudFront配置为“使用原始缓存标头”,则CloudFront将使用from的max-age值Cache-Control
来确定对象可以在CloudFront缓存的时间,除非该s-maxage
值也存在,在这种情况下,CloudFront将使用该值。
如果您配置了最小/最大/默认值,CloudFront将使用这些计数器来确定可以将对象缓存多长时间:
Cache-Control: max-age
(或s-maxage
如果存在)对象的值较低,也可以将对象至少缓存此时间。实际上,将Minimum TTL设置为非零值会导致CloudFront忽略Cache-Control
指令no-cache
,no-store
和private
,并对其进行高速缓存,直到达到Maximum TTL值为止。在希望浏览器查看这些值但仍希望CloudFront进行缓存的情况下很有用对象。Cache-Control: max-age
具有更高的值,对对象的缓存也不会超过此时间。Cache-Control
在对象上看不到对象,则可能会缓存该对象这么长时间。您不需要这个,因为到处都应该有Cache-Control
标头。关于这些设置的重要注意事项:
同样重要的是,CloudFront具有两个按地理区域组织的缓存层-区域(内部)和边缘(外部)。边缘高速缓存数量更多并且在地理上分布,但是区域高速缓存具有更大的存储容量。如果您通过CloudFront获取对象,则CloudFront会将对象缓存在某个地方(一个区域缓存或一个边缘缓存或每个缓存之一),但是下一个请求(可能来自不同地理区域的浏览器)可能会通过通过边缘和区域,以前从未通过该区域请求过对象。另一方面,可能会通过没有它的边缘来请求它,但是将从区域缓存中获取它。当您了解说那意味着什么时,请记住这一点在任何给定时间的任何给定对象都不能正确地说是在高速缓存中或不在高速缓存中,因为没有“ the”高速缓存。世界各地有多个缓存,其中许多缓存不会彼此通信,因为这会使事情变慢,而不是变快。如果您的网站在澳大利亚很受欢迎,而在英国却不受欢迎,则可能有对象的副本缓存在亚太缓存位置,而不是在西欧缓存位置。此行为是完全自动的,不是您要配置的,但是您需要知道CloudFront没有单个整体式缓存。对象被缓存在被访问的地方。
是否有任何工具可以检查S3和cloudFront部署,即返回的标头
您的眼球是最好的工具。浏览器中的响应头告诉您需要了解的内容:
Age:
是CloudFront在多久之前将该对象保存在其缓存中。
X-Cache: Hit from cloudfront
意味着CloudFront不必从S3获取对象,因为它已经被缓存了。 Miss from cloudfront
表示CloudFront在处理此请求的边缘的缓存中没有对象,需要从S3提取对象。
命令行实用程序curl
及其-v
选项对于观察Web标头也很有用。
归档时间: |
|
查看次数: |
1146 次 |
最近记录: |