【问题标题】:Files requested from Cloudfront aren't cached从 Cloudfront 请求的文件未缓存
【发布时间】:2014-06-09 22:19:53
【问题描述】:

我已成功设置 AWS Cloudfront(我认为)。成功是指我从云端获取东西。

我注意到浏览器没有缓存内容,而是重新下载了所有内容。

我将config.static_cache_control = "public, max-age=#{1.year.to_i}" 添加到production.rb 但没有帮助

我正在使用 Heroku、Rails 4.0.4、回形针和asset_sync

我是否遗漏了配置中的任何内容?还是出了什么问题?

这是请求标头

GET /users/avatars/me.jpg HTTP/1.1
Host: assets.mydomain.net
Connection: keep-alive
Cache-Control: no-cache
Accept: image/webp,*/*;q=0.8
Pragma: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36
DNT: 1
Referer: http://mydomain.com
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,he;q=0.6

和响应头

HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 18394
Connection: keep-alive
Date: Thu, 24 Apr 2014 14:16:40 GMT
Last-Modified: Sun, 09 Mar 2014 21:17:09 GMT
ETag: "a81f57bc65cea2535w75aa94c334d"
Accept-Ranges: bytes
Server: AmazonS3
Age: 2157
X-Cache: Hit from cloudfront
Via: 1.1 96cb60390320349823485f0fb38.cloudfront.net (CloudFront)
X-Amz-Cf-Id: gceHbzsluASDFvraASFvalerhgy_GY3nP0Qaa7iPY1ug==

对于资产

请求:

Accept:text/css,*/*;q=0.1
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,he;q=0.6
Cache-Control:no-cache
Connection:keep-alive
DNT:1
Host:d36kdk9v8wr6hu.cloudfront.net
Pragma:no-cache
Referer:http://mydomain.com
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36

响应标题

Accept-Ranges:bytes
Age:2315
Cache-Control:public, max-age=31557600
Connection:keep-alive
Content-Encoding:gzip
Content-Length:34412
Content-Type:text/css
Date:Thu, 24 Apr 2014 14:16:40 GMT
ETag:"795ae17b75612313b5ce5ecf1a14cd8"
Expires:Fri, 24 Apr 2015 20:12:58 GMT
Last-Modified:Thu, 24 Apr 2014 14:12:59 GMT
Server:AmazonS3
Via:1.1 96cb60390320349823485f0fb38.cloudfront.net (CloudFront)
X-Amz-Cf-Id:SkbZJTSD5PAPnawlerszlsdfnzIOqJROA4LegMgBIPcU1aN0T08sdUA==
X-Cache:Hit from cloudfront

【问题讨论】:

  • 您如何确定内容没有被缓存?您的缓存控制标头看起来不错。
  • hmm,所以也许我很困惑.. chrome 检查 > 网络是否应该在每个请求下显示,如果它是从缓存中获取的,或者不在大小列中?现在每个资产或图像都显示它的大小而不是缓存。这意味着什么吗?

标签: ruby-on-rails heroku asset-pipeline browser-cache amazon-cloudfront


【解决方案1】:

这对我有用。打开作为 CloudFront 分配源的 S3 存储桶,并找到要缓存的文件。然后在“属性”>“元数据”下设置一个 Cache-Control 键,其中包含您想要的 max-age=x 值。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-13
    • 2017-02-17
    • 2021-07-11
    • 2020-07-16
    • 2020-06-07
    • 2021-07-24
    • 1970-01-01
    • 2012-09-12
    相关资源
    最近更新 更多