我正在使用最新的Sinatra,而我正在使用Heroku。有没有办法可以为从/public
目录提供的静态资产设置缓存标头?
Sinatra在检查已定义的任何路由之前提供/public
目录中的文件,因此我不能只在路由中使用cache_control
方法。
/public
目录包含我的应用的CSS和JavaScript。我不希望浏览器每次都下载这些文件,因为它们不会经常更改。
答案 0 :(得分:1)
我使用以下方法创建了一个简单的Sinatra网站:
#!/usr/bin/env ruby
require 'sinatra'
get '/public/*' do
cache_control :public, max_age: 60 * 60 * 24 * 365
'this is public'
end
get '/' do
'hello world!'
end
当我请求“/
”时,我收到了这些标题:
x-frame-options: sameorigin
x-xss-protection: 1; mode=block
Content-Type: text/html;charset=utf-8
Content-Length: 12
Connection: keep-alive
Server: thin 1.5.0 codename Knife
200 OK
当我请求'/public/foo
'时,我得到了这些:
x-frame-options: sameorigin
x-xss-protection: 1; mode=block
Content-Type: text/html;charset=utf-8
Cache-Control: public, max-age=31536000
Content-Length: 14
Server: thin 1.5.0 codename Knife
200 OK
它正在使用Ruby 1.9.3p194上的当前Sinatra(1.3.3)。