我发送的格式正确的HTTP响应“已过期” header (例如“Wed,2011年5月04日09:29:09 GMT”)中带有通过https://[host]:{port}/提供的页面(其中[host]为J2EE应用程序使用response.setDateHeader("Expires", {milliseconds a few seconds in the future} )
从localhost)。
在我的页面上,我具有指向同一页面的链接。当我从Firefox(4)或IE(8)中单击此链接时,页面将从缓存中重新加载,直到达到过期时间。过期时间过后,单击同一链接将导致服务器上的页面加载有新数据。如果我在任何一个提到的浏览器上都按了F5键,则该页面会重新加载服务器中的新数据(Firebug向我显示Cache-Control: max-age=0
与请求一起发送了)。
使用Google Chrome浏览器,F5和单击链接都具有相同的效果。该页面总是从服务器上重新加载新数据。
我找不到关于此效果的任何有据可查的解释。
有谁知道为什么在我的情况下,谷歌浏览器不尊重服务器发送的带有页面响应的“过期” header ,因此总是向服务器请求数据?
最佳答案
Chrome 在这方面的工作方式可能引起极大的困惑。似乎按F5或“重新加载此页面”只是阻止chrome服务来自缓存的请求。与在url窗口中按Enter键(使用缓存)相比,这很容易,即使在两种情况下,请求 header (未发送到任何地方)都具有Cache-Control:max-age = 0。
如果按ctrl + F5,则会显示Cache-Control:no-cache。我认为F5和ctrl + F5之间的区别是,两者都将导致请求发送到服务器,但是在ctrl + F5的情况下,服务器应该知道不响应且未修改304。