【问题标题】:Rack::ResponseHeaders in rackup for SinatraSinatra 机架中的 Rack::ResponseHeaders
【发布时间】:2011-02-23 16:06:04
【问题描述】:

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

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 ) 已安装。我会先调查一下。

【问题讨论】:

    标签: sinatra heroku rack


    【解决方案1】:

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

    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 小时。

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 2013-10-12
      • 1970-01-01
      • 2016-03-06
      • 2011-01-15
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多