在响应中设置缓存控制头

4
我正在使用Rails (v3.2.21)开发API应用程序,并尝试设置响应中的“Cache-Control”标头,以便我的客户端应用程序可以缓存它们。然而,实际响应的标头值仍在使用默认值(使用Chrome中的Advanced Rest Client插件进行检查)。
从谷歌搜索来看,似乎expires_in方法是实现此目的的方法:
expires_in 3.hours, :public => true

然而,当我请求该资源时,它总是返回(默认值?):
Cache-Control: must-revalidate, no-cache, no-store, private, max-age=0

当我在expires_in后面立即执行binding.pry并检查response.headers时,它是空的...似乎也是错误的。
我在控制器中的before_filter中执行上述操作,并且还尝试在调用render返回响应之前立即执行上述操作。
我应该补充说明,我尝试使用response.headers["CacheControl"] = "blah"手动设置“Cache-Control”头,但这也不起作用,而且我已经在其他地方读到Rails不允许这样做。
有人对我在这里做错了什么有任何想法吗?

你在开发环境中重现了这个问题吗? - Maxim
是的,这是在开发环境中。但是,在我的配置中,我设置了perform_caching = true,据我所知,这将允许缓存工作。 - Glenn Porter
1个回答

3

实际上这是由于我在应用程序中设置的某些其他配置导致缓存无法正常工作(特别是对于开发环境,Bullet.disable_browser_cache 设置为 true)。将其设置为 false 可以使缓存正常工作。


使用expires_in 3.hours, :public => true的正确方式是什么,用于设置缓存控制? - MicFin
1
@MicFin,我已经有一段时间没有看过这个了,但是我当时的做法如下: expires_in(1.year, "must-revalidate" => true 所以我猜你可以尝试一下: expires_in(30.hours), "public" => true(顺便说一句,我还没有测试过这个!) - Glenn Porter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接