为什么我的页面没有被缓存?

时间:2010-11-29 17:43:18

标签: asp.net http caching

这只会让我生气。我无法弄清楚为什么我的页面中的所有资源每次都被请求。

E.g。我的site.css返回以下标题(使用fiddler):

HTTP/1.1 200 OK
Server: ASP.NET Development Server/9.0.0.0
Date: Mon, 29 Nov 2010 17:36:21 GMT
X-AspNet-Version: 2.0.50727
Content-Length: 9093
Cache-Control: public, max-age=2592000
Expires: Wed, 29 Dec 2010 17:36:21 GMT
Last-Modified: Mon, 08 Nov 2010 17:20:16 GMT
Content-Type: text/css
Connection: Close

但是每次点击刷新我都会看到所有资源(css,js,images)被重新请求。我可以控制为任何和所有这些资源返回的标头,但我还没有想出来。

我甚至调试了我的ASP.NET应用程序,并且肯定会再次要求HttpModule获取资源。

有人可以告诉我该怎么做吗?

编辑: 好的,我从标题中删除了must-revalidate, proxy-revalidate,这让我更接近我想要的位置,现在当我按下它时,它仍然会在我按下时请求我的css / js文件。

我还能做些什么来避免这种情况吗?

2 个答案:

答案 0 :(得分:4)

以下链接可能对您有所帮助。

Differences in reload behavior between FF and IE

http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/

简而言之,您的缓存行为将取决于您使用的标头和浏览器。

您使用哪种浏览器进行测试?后退按钮的处理方式也不同。

Back Button (Browser Behavior)

最后,浏览器之间的f5 / ctrl f5细分,点击,移动点击等行为: What requests do browsers' "F5" and "Ctrl + F5" refreshes generate?

答案 1 :(得分:2)

如果您正在处理自己模块中的请求 - 这似乎是这种情况 - 并且请求包含If-Modified-Since标头,您可以使用它来确定是否响应200并发送整个资源再次,或者只是发送304并跳过发送js / css / etc内容。

除此之外,期望浏览器在点击F5 / Refresh时重新查询资源。只是你可以跳过发送整个js / css / etc,如果一切正常,则返回304。 除此之外,@ Chris的答案涵盖了其他所有内容。

点击后会看到哪些请求标题?