我按照' 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 更改了服务器,但问题仍在那里。
答案 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,然后单击“缓存”链接,然后返回显示的时间应该保持不变,因为正在使用缓存版本并且没有向服务器发出请求。如果您按照“未缓存”链接重复返回,则每次显示的时间都会增加,因为页面未被缓存,并且每次都会发出新请求。