使用Sinatra时,如何控制静态资产的缓存?

时间:2012-10-10 18:32:23

标签: ruby heroku sinatra

我正在使用最新的Sinatra,而我正在使用Heroku。有没有办法可以为从/public目录提供的静态资产设置缓存标头?

Sinatra在检查已定义的任何路由之前提供/public目录中的文件,因此我不能只在路由中使用cache_control方法。

/public目录包含我的应用的CSS和JavaScript。我不希望浏览器每次都下载这些文件,因为它们不会经常更改。

1 个答案:

答案 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)。