2012-01-26 131 views
2

我有一个非常简单的网站,我创建。我试图在浏览器中测试JS缓存,但它似乎没有工作。我认为只要文件名不变,大多数主流浏览器都会默认缓存JS文件。我有本地在IIS 7中运行的网站。IIS7 ASP.NET MVC静态JavaScript文件缓存?

对于我的测试,我有一个简单的JS文件正在写身体负载文件。如果我更改JS文件(更改写入文档的文本),然后保存该文件,刷新浏览器时看到更新。为什么是这样?只要JS文件名没有改变,我不应该看到原始输出吗?

Here is the simple site我创建测试。

回答

7

刷新浏览器时,浏览器向服务器发送请求以显示页面所需的所有资源。如果浏览器具有任何所需资源的缓存版本,则可能会在该资源的请求中发送一个If-Modified-Since标头。当服务器收到这个头时,不是只提供资源,而是将修改后的资源时间与If-Modified-Since头中提交的时间进行比较。如果资源发生了变化,服务器将照常以200状态发回资源。但是,如果资源没有更改,服务器将回复状态304(未修改),浏览器将使用其缓存版本。

在你的情况下,修改日期已经更改,所以浏览器发送新版本。

在您的浏览器中测试缓存的最佳方式可能是使用fiddler,并在浏览您的网站时监控请求和响应。避免在测试中使用刷新按钮,因为这经常会导致浏览器请求所有资源的新副本(即省略If-Modified-Since标头)。

编辑:以上可能是过度简化发生了什么事情。网络搜索当然会产生大量深入的文章,从而更深入地理解浏览器缓存在每个浏览器中的工作原理。

+0

简化也许,但一个非常明确的! –

+0

嗯,我正在刷新按钮:-) – Alex