我有a Rails app,它使用Cloudfront作为其CDN和链轮来压缩 Assets 并设置较长的Cache-Control header 。

对 Assets 的第一个请求为我提供了响应 header ,如下所示:

快取控制:公开,最大年龄= 31536000
连接方式:关闭
内容编码:gzip
内容类型:应用程序/javascript
Etag:“892a3afb514e3c84646835f9ef101026”
上次修改时间:星期二,2012年1月17日格林尼治标准时间
服务器:薄的1.2.11代号Bat-Shit Crazy
变体:接受编码
通过:1.0 c662f4e5a3bc7b224ce1bbecb0a23d82.cloudfront.net:11180(CloudFront),1.0 fc4797024fafe16fcc03e892c23f078d.cloudfront.net:11180(CloudFront)
X-Amz-Cf-Id:bd2a89fb81bba2513f30d6940347693ef483defb4783da06d81b002af23545c39b9176b2c7cb144f,VF69FYlYU8ezzHQp7QkU2GvEQ8NmDqEERRX-wu7H63Y
X-Cache:Cloudfront小姐
X运行时:0.012413
X-Ua-Compatible:IE = Edge,chrome = 1

完美的。它错过了Cloudfront的缓存,无法从我的应用程序中获取它,因此从现在开始应该从那里加载它。

现在...如果刷新页面,则会得到以下响应头:

连接:保持事件状态
服务器:薄的1.2.11代号Bat-Shit Crazy
通过:1.0 86123d99569c9296c8605243e9a10621.cloudfront.net:11180(CloudFront),1.0 de9fc23d505dae3d19973a98bfa1eba0.cloudfront.net:11180(CloudFront)
X-Amz-Cf-Id:a7bf6ffb30c43d306835190d210aeb8ec794c1ff619ad7aaecbad220c1822fe165bda624ae8382e1,bcij_88KOAvLPSqEKDRSvOBjEj7atiKBCAjSbqc2cfdb-BHOTi--LA ==
X-Cache:来自Cloudfront的刷新
X运行时间:0.006909
X-Ua-Compatible:IE = Edge,chrome = 1

看起来很像Cloudfront。我得到304 not modified。因此,看来我不会再下载文件了,但是我也看到了对我的源服务器的请求。

为什么会这样? Cloudfront不应该现在总是缓存我的 Assets 吗?我正在对我的 Assets 进行版本控制,所以我真的不希望从服务器中取出该资源,除非有第一个请求。有什么办法可以强制这种行为?

最佳答案

原来是Cloudfront won't respect the Cache-Control header if no Date header is set

在 Assets 中添加日期 header 可修复所有问题。

关于ruby-on-rails - 将Cloudfront设置为永不重新获取 Assets ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8935313/

10-15 09:11