【问题标题】:Cloudfront not caching despite Cache-Control尽管有 Cache-Control,Cloudfront 没有缓存
【发布时间】:2015-12-01 15:07:59
【问题描述】:

我有一个 Cloudfront 分发,它指向一个服务器,该服务器从 S3 存储桶调整图像大小。服务器返回带有public, max-age=31104000Cache-Control 标头,但我不断收到 miss from Cloudfront 所以图片不会缓存在 Cloudfront 中。

为了测试,我设置了另一个直接指向 S3 存储桶的 Cloudfront 发行版,它确实缓存了带有 hit from Cloudfront 的图像。

我比较了请求头和响应头,唯一的区别是miss有一个Last-Modified头响应,这是好的请求中缺少的。但是,我不确定这是否是问题所在。

你知道发生了什么吗?以下是标题:

Good Response:
Age:10
Cache-Control:public, max-age=31104000
Connection:keep-alive
Date:Sat, 05 Sep 2015 16:15:51 GMT
ETag:"51dbe11a5fa320c4495221b69df1d860"
Server:AmazonS3
Via:1.1 b7bc8b4c398aa9f5a08980055c497334.cloudfront.net (CloudFront)
X-Amz-Cf-Id:4KE-cAoFrTmcjkRW3goZAImvyQE5i1Vl4KZyrWL8HyCk6GcJZ9N7Kw==
X-Cache:Hit from cloudfront

Bad Response:
Cache-Control:public, max-age=31104000
Connection:keep-alive
Date:Sat, 05 Sep 2015 16:16:42 GMT
ETag:"51dbe11a5fa320c4495221b69df1d860"
Last-Modified:Sat, 05 Sep 2015 16:07:41 GMT
Server:nginx/1.6.2
Via:1.1 45578d14a69df96accaab0d1aba82a5a.cloudfront.net (CloudFront)
X-Amz-Cf-Id:FGMRwDI0vOJQ7aPj83s-RGTO0fg_Zesu7FLo7Ia5vwCxcTZI97ri5A==
X-Cache:Miss from cloudfront

Good Request:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0    .8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,da;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Host:assets.runemadsen.com
If-Modified-Since:Sat, 05 Sep 2015 16:07:41 GMT
If-None-Match:"51dbe11a5fa320c4495221b69df1d860"
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (    KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36

Bad Request:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0    .8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,da;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Host:images.runemadsen.com
If-Modified-Since:Sat, 05 Sep 2015 16:07:41 GMT
If-None-Match:"51dbe11a5fa320c4495221b69df1d860"
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (    KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36

任何帮助表示赞赏。

【问题讨论】:

  • 您知道为什么在任何一个响应中都没有Content-Length:Content-Transfer-Encoding: 标头吗?在Connection: keep-alive 面前,似乎其中一个是强制性的。如果您的调整大小没有发送任何标头,CloudFront 可能会假设得到的响应是未知的有效性。在这种情况下,文档claim 对象被缓存,但这似乎很粗略。
  • 澄清一下,您是说如果您一遍又一遍地重复相同的请求,CloudFront 会反复从源中获取,并且从不从缓存中提供它?您的原始服务器是否返回 Date: 标头?捕获(并提及)您的原始服务器实际返回的内容在这里可能很有用。还要验证...您没有将 CloudFront 配置为将所有请求标头转发到源服务器,对吗?这样做disables caching.

标签: caching amazon-cloudfront


【解决方案1】:

感谢 cmets。这是最后的更新:原因是没有Cache-Control 的旧响应被缓存在 Cloudfront 中,这以某种方式使 cloudfront 不断地从源重新加载图像。我不确定缓存的响应如何触发持续的“错过”,但这就是发生的事情。我使路由无效,Cloudfront 开始缓存图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 2015-04-13
    • 1970-01-01
    • 2018-03-14
    • 2017-07-03
    • 2019-06-02
    • 2021-11-10
    相关资源
    最近更新 更多