我目前正在构建rails应用程序并尝试提高其页面速度洞察力标记。剩下的唯一警告就是我的资产标题。
在查看rails文档和互联网上的一些文章之后,这是我在production.rb文件中提出的内容:
config.public_file_server.headers = {
'Cache-Control' => 'public, s-maxage=31536000, max-age=86400',
'Expires' => "#{1.day.from_now.httpdate}"
}
现在,这是我的js / css文件的chrome网络选项卡中显示的内容:
cache-control:public, max-age=86400
content-encoding:gzip
content-length:90444
content-type:application/javascript
date:Tue, 22 Aug 2017 10:49:05 GMT
last-modified:Tue, 22 Aug 2017 08:49:06 GMT
server:...
缓存控件按原样出现,但没有过期标头。
我也使用cloudfront,但我不确定我是否应该/可以改变那里的标题。
我做错了吗?
答案 0 :(得分:2)
如果您使用的是Rails 4 ,则只能为Rails提供的资产设置Cache-Control
响应标头。这是一个限制。
您的解决方案适用于 Rails 5
Rails 5源代码中有一个测试,它确保响应中包含自定义标头:
def test_serves_files_with_headers
headers = {
"Access-Control-Allow-Origin" => "http://rubyonrails.org",
"Cache-Control" => "public, max-age=60",
"X-Custom-Header" => "I'm a teapot"
}
app = ActionDispatch::Static.new(DummyApp, @root, headers: headers)
response = Rack::MockRequest.new(app).request("GET", "/foo/bar.html")
assert_equal "http://rubyonrails.org", response.headers["Access-Control-Allow-Origin"]
assert_equal "public, max-age=60", response.headers["Cache-Control"]
assert_equal "I'm a teapot", response.headers["X-Custom-Header"]
end
此外,即使您以某种方式添加Expires
标题,max-age
也会优先。
答案 1 :(得分:1)
config.public_file_server.headers = {
'Cache-Control' => 'public, s-maxage=31536000, max-age=86400',
'Expires' => "#{1.day.from_now.to_formatted_s(:rfc822)}"
}
试试这个