Sinatra:页面更新结果,即使我告诉它缓存以前的结果

时间:2014-07-24 10:58:42

标签: ruby caching sinatra

我按照' Sinatra中的示例:启动并运行' 。以下代码:

before  do
 content_type :txt
end

get '/' do
 headers "Cache-Control" => "public, must-revalidate, max-age=3600", 
 "Expires" => Time.at(Time.now.to_i + (60 * 60)).to_s
 "This page rendered at #{Time.now}."
end

应该显示一次正确的时间,并且仅在一小时后更新它(因为根页面被缓存)。但每次我在浏览器中更新页面时,它都显示正确的时间(Opera,Chrome,Firefox)。 我使用 Webrick 服务器和霰弹枪 gem。可能是什么问题?

编辑:我为 thin 更改了服务器,但问题仍在那里。

1 个答案:

答案 0 :(得分:2)

这是正确的行为。该页面正在由您的Web浏览器缓存,但是当您刷新页面时,您将覆盖此缓存并明确告诉浏览器再次获取该页面。如果您按照指向页面的链接而不是刷新,就像正常浏览时那样,将使用缓存版本。

这是一个应该显示差异的小应用程序:

require 'sinatra'

before do
  content_type :html
end

get '/' do
  "<a href=/cached>Cached</a><br><a href=/uncached>Uncached</a>"
end

get '/cached' do
  headers "Cache-Control" => "public, must-revalidate, max-age=3600", 
    "Expires" => Time.at(Time.now.to_i + (60 * 60)).to_s
  "<p>This page rendered at #{Time.now}.<p><a href=/>Back</a>"
end

get '/uncached' do
  "<p>This page rendered at #{Time.now}.<p><a href=/>Back</a>"
end

如果你运行它,浏览到根URL,然后单击“缓存”链接,然后返回显示的时间应该保持不变,因为正在使用缓存版本并且没有向服务器发出请求。如果您按照“未缓存”链接重复返回,则每次显示的时间都会增加,因为页面未被缓存,并且每次都会发出新请求。