1

我有一个应用程序在http://chesseng.herokuapp.com/上的 heroku 上运行,当我访问带有 chrome 并且禁用缓存的页面时,我得到了 application-fingerprint.css 的响应标头,类似于

Cache-Control:private
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/css
Date:Wed, 17 Oct 2012 00:17:19 GMT
Last-Modified:Tue, 16 Oct 2012 03:13:38 GMT
Status:200 OK
transfer-encoding:chunked
Vary:Accept-Encoding
X-Rack-Cache:miss

但是,如果我启动一个本地实例rails s -e production并访问它,application-fingerprint.css 的响应标头类似于

Age:5119
Cache-Control:public, max-age=31536000
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:95828
Content-Type:application/javascript
Date:Tue, 16 Oct 2012 23:01:27 GMT
Etag:"0bf9e9837d421c2e28be1ef4f0794a48"
Last-Modified:Tue, 16 Oct 2012 01:07:17 GMT
Server:WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20)
Vary:Accept-Encoding
X-Content-Digest:add442e2036c1e6e9f4860dcc44496582a5c91b1
X-Rack-Cache:fresh
X-Request-Id:b89de17e397ac7b60acfe500e8d15df9
X-Runtime:0.001632
X-Ua-Compatible:IE=Edge,chrome=1

为什么 Cache-Control、Etag 等缓存相关字段与 heroku 相比如此不同?大概我希望 heroku 返回 Cache-Control:public, max-age=31536000。但我需要先了解为什么Cache-Control:public, max-age=31536000在我的本地生产模式下设置。令人费解的是,如果我config.static_cache_control = "public, max-age=3600"config/environments/production.rb生产中设置并启动本地服务器,它仍然会回馈max-age=31536000并且似乎忽略max-age=3600

4

1 回答 1

0

X-Rack-Cache标头看来,您正在使用会影响缓存标头的rack-cache 中间件。由于您的资源在本地位于缓存 ( X-Rack-Cache:fresh) 中,但在 Heroku 上却不是 ( X-Rack-Cache:miss) 可以解释差异。

尝试从中间件堆栈中删除 rack-cache 并查看差异是否消失。

于 2012-10-17T02:56:53.493 回答