1

我有以下问题:我想在 Redis 中缓存一个动作的结果。出于这个原因,我使用https://github.com/jodosha/redis-rack-cache。一个动作应该被 Rack::Cache 缓存的事实是通过在 Rails 中设置适当的 HTTP 标头信息来确定的,例如:

response.headers['Cache-Control'] = 'max-age=3600, public, must-revalidate'

现在,Rack::Cache 将在 Redis 中正确缓存响应。但是,此标头也确实告诉浏览器缓存响应,这是我想要的!请求应专门缓存在服务器端。

作为一种解决方法,我正在替换 nginx 中的标头,我将其用作反向代理,但必须有更优雅的方式。有人知道怎么做吗?

最好的问候,马丁

4

1 回答 1

1

一种选择是编写您自己的位于 Rack::Cache 之上的中间件,然后从响应中删除这些 Cache-Control 标头。

像这样简单的东西:

  def call(env)
    status, headers, body = @app.call(env)
    headers.delete("Cache-Control")
    [status, headers, body]
  end

将作为中间件工作。

于 2012-05-03T19:02:16.333 回答