浏览器缓存机制的一个问题

时间:2011-05-12 03:48:09

标签: asp.net internet-explorer iis browser

图片回复始终包含“上次修改”标题。但是,一旦我点击F5 刷新页面,IE总是会获得这些图片的 304 响应,而不是使用本地cahce

点击F5总是让浏览器发出新请求吗?

BTW:IIS是我们的主机服务器(ASP.NET MVC 2)。

感谢。

1 个答案:

答案 0 :(得分:2)

304响应告诉浏览器图片自上次下载以来未被修改过。然后,浏览器从其本地缓存中获取图像。

即使图像是在本地缓存的,浏览器仍然必须询问服务器是否有更新的图像以防止缓存变得陈旧。

编辑:

在浏览器中加载(或刷新)页面时,浏览器会在其缓存中查找所需的任何文件。如果它在缓存中找到文件,则会查看创建/修改缓存文件的时间。

然后,浏览器将向服务器发送请求(即使存在文件的缓存版本)。在请求中,浏览器将包含具有已缓存文件的创建/修改时间的标头。服务器负责将标头中发送的日期与服务器上次更改的日期进行比较。如果服务器发现客户端的缓存版本是旧的(即浏览器发送的日期早于服务器版本的日期),则服务器将只返回实际文件,浏览器将不使用缓存版本。浏览器将使用新文件更新其缓存。

另一方面,如果在创建/修改高速缓存文件之前上次修改了服务器副本,则这意味着高速缓存的副本仍然有效。服务器将使用HTTP 304代码进行响应,该代码告诉浏览器其缓存副本是有效的。在这种情况下,服务器不会重新发送整个文件。

如果知道缓存的副本是相对较新的(可能只有几分钟或几个小时),浏览器通常甚至都不会费心去检查更新的文件。在这种情况下,浏览器将仅使用缓存副本,而不首先检查服务器是否有更新版本。您可以通过在重新加载页面时按住控件(或Mac上的命令)来强制浏览器忽略缓存。

相关问题