为什么当我定义HTTP“Expires”头时,Google Chrome不使用缓存页面

9
我正在发送格式正确的HTTP响应“Expired”头信息(例如“Wed,04 May 2011 09:29:09 GMT”),通过使用response.setDateHeader(“Expires”,{未来几秒钟的毫秒数})从J2EE应用程序提供的页面,通过https:// [host]:{port}/(其中[host]为localhost)。
在我的页面上,我有一个链接指向同一页面。当我在Firefox(4)或IE(8)中点击此链接时,页面将从缓存重新加载,直到达到过期时间。一旦过期时间过去,再次点击相同的链接会导致页面从服务器加载新数据。如果我在这两个浏览器中按F5,则页面将使用来自服务器的新数据重新加载(Firebug显示我发送了Cache-Control:max-age = 0 的请求)。
在Google Chrome中,无论是按F5还是单击链接,效果都相同。页面始终从服务器重新加载新数据。
我无法找到任何关于这种效果的详细说明。
有人知道为什么在我的情况下Google Chrome不尊重服务器发送的“Expired”头信息,因此总是从服务器请求数据吗?
1个回答

8
在这方面,Chrome的工作方式可能会引起极度混乱。似乎按F5或“重新加载此页面”只是阻止Chrome从缓存中提供请求。这可以轻松与在URL窗口中按Enter进行比较,在这种情况下,它将使用缓存,尽管在两种情况下请求头(不发送到任何地方)具有Cache-Control:max-age=0。
如果你按ctrl+F5,你会得到Cache-Control:no-cache。我认为F5和ctrl+F5之间的区别在于,两者都会导致向服务器发送请求,但在ctrl+F5的情况下,服务器应该知道不要响应304未修改。

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