Ruby on rails Rails.app与Rack::Cache的独占服务器端缓存

Ruby on rails Rails.app与Rack::Cache的独占服务器端缓存,ruby-on-rails,caching,rack,browser-cache,Ruby On Rails,Caching,Rack,Browser Cache,我有以下问题:我想在Redis中缓存操作的结果。出于这个原因,我使用。Rack::Cache应该缓存某个操作的事实是通过在Rails中设置适当的HTTP头信息来确定的,例如: response.headers['Cache-Control'] = 'max-age=3600, public, must-revalidate' 现在,Rack::Cache将正确地在Redis中缓存响应。但是,此标题也会告诉浏览器缓存响应,我不希望这样!请求应该以独占方式缓存在服务器端 作为一种解决方法,我将替换

我有以下问题:我想在Redis中缓存操作的结果。出于这个原因,我使用。Rack::Cache应该缓存某个操作的事实是通过在Rails中设置适当的HTTP头信息来确定的,例如:

response.headers['Cache-Control'] = 'max-age=3600, public, must-revalidate'
现在,Rack::Cache将正确地在Redis中缓存响应。但是,此标题也会告诉浏览器缓存响应,我不希望这样!请求应该以独占方式缓存在服务器端

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

致以最良好的祝愿,
Martin

一个选项是编写位于Rack::Cache之上的自己的中间件,然后从响应中删除这些缓存控制头

简单到:

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

将作为中间件工作。

一个选项是编写位于Rack::Cache之上的自己的中间件,然后从响应中删除这些缓存控制头

简单到:

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

将用作中间件。

Hmm,好的-但是,这将比我现有的使用nginx的解决方案稍微优雅一些:/Hmm,好的-但是,这将比我现有的使用nginx的解决方案稍微优雅一些:/