我正在制作一个网络应用,其中许多用户将查看Google地图,地图上的更新通过对服务器的ajax请求拉入。我希望缓存发送给用户的响应,因为它涉及从外部服务器抓取数据,并且只需要每2-3分钟更新一次。
因此,只要一个人请求数据,我希望所有其他用户的所有后续请求在接下来的2-3分钟内从缓存中提取。我跟着this tutorial,详细介绍了如何使用Heroku在Sinatra中设置Rack :: Cache和Dalli gem,当我在设置了以下内容的页面上运行测试时,
cache_control :public, max_age: 3000
我可以看到缓存标头正确显示(使用Google Chrome开发者工具),但如果我点击刷新,或者我从另一台计算机请求该页面,则内容显然已重新生成(我输入了Time.now输出) 。但是,如果我转到另一个页面,然后重新键入URL,则不会重新生成内容。我认为浏览器正在缓存结果,而不是内存缓存服务器?我对缓存的工作方式有一个基本的误解吗?
答案 0 :(得分:0)
对于提出这个问题的人来说,这里有一些线索可以帮助你解决问题(帮助我)。
"刷新"在浏览器中,导致" Cache-Control:max-age = 0": https://groups.google.com/forum/#!topic/rack-cache/sWHyu4pYwKw
清除缓存并删除缓存目录(这对我有用): https://github.com/rails/rails/issues/5245
使用rspec / other为其添加规范 Sinatra, Rack::Test, and Conditional GET requests