1

我认为这是一个非常容易的,但我似乎无法做到这一点。基本上,我正在尝试使用 Rack 中间件将默认的 Cache-Control 标头设置到我的 Sinatra 应用程序提供的所有响应中。看起来 Rack::ResponseHeaders 应该能够完全满足我的需要,但是在尝试使用我的 rackup 文件中演示的语法时出现错误:

use Rack::ResponseHeaders do |headers|
    headers['X-Foo'] = 'bar'
    headers.delete('X-Baz')
end

我能够让 Rack::Cache 成功工作,如下所示:

use Rack::Cache,
    :default_ttl => 3600

但是,这并不能完全达到我想要的输出,而 Rack::ResponseHeaders 提供了对标头的细粒度控制。

仅供参考,我的网站托管在 Heroku 上,所需的 Rack gem 在我的 .gems 清单中指定。

谢谢!

更新:经过一番研究,第一个问题似乎是在安装的 rack-contrib (0.9.2) 版本中找不到 Rack::ResponseHeaders。我将从调查开始。

4

1 回答 1

5

如果有人感兴趣,我可以让这个工作。在 Heroku上安装似乎并不容易rack-contrib-0.9.3,但我需要的唯一文件是response_headers.rb,所以我只是将它复制到我的项目目录中并编辑了我的 rackup,如下所示:

require 'rack/contrib/response_headers'

# set default cache-control header if not set by Sinatra
use Rack::ResponseHeaders do |headers|
    if not headers['Cache-Control']
        headers['Cache-Control'] = "public, max-age=3600"
    end
end

这将为我没有在 Sinatra 中指定显式 Cache-Control 标头的对象(即静态资产)设置默认的 max-age 1 小时。

于 2010-05-27T12:16:26.980 回答