IIS7:为所有aspx页面设置“no-cache”,但不为images / css / js设置

时间:2010-01-07 19:16:16

标签: asp.net iis caching http-headers

我不想在任何地方缓存我的aspx页面。出于某种原因,IE忽略了从我的母版页

设置的元标记
<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">

我试图看看我是否可以将我的Http响应头设置为“Cache-Control” - “no-cache”。设置类似

的内容
HttpContext.Current.Response.Headers.Add("Cache-Control", "no-cache");
   HttpContext.Current.Response.Headers.Add("Exipres", DateTime.Now.AddDays(-1).ToShortDateString());

在每一页都会很痛苦。我在想,无论如何我们都可以在IIS7中设置它(将此标题添加到aspx页面,但不是image / css / js)。有可能吗?

编辑:根据http://technet.microsoft.com/en-us/library/cc753133%28WS.10%29.aspx中的建议,添加自定义http响应标头会将标头添加到所有文件,包括js,css,images。所以在这里添加“Cache-Control”,“no-cache”也不起作用

Edit2:我正在考虑添加一个httpmodule。与http://blogs.technet.com/stefan_gossner/archive/2008/03/12/iis-7-how-to-send-a-custom-server-http-header.aspx类似的东西。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

http://technet.microsoft.com/en-us/library/cc770661(WS.10).aspx

默认情况下,IIS仅缓存静态内容;如果它已经缓存了非静态内容,你将不得不进行调整。

答案 1 :(得分:2)

如果您正在为您的网站使用MasterPage,您可能需要考虑在其Page_Load事件中添加以下响应标头:

protected void Page_Load(object sender, EventArgs e)
{
Response.AddHeader("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate");
}

由于您的.js文件不会使用MasterPage,浏览器应该将引用保存到其缓存中。

以上示例是我使用的,它在Firefox3,IE7和Chrome7下运行良好。请注意,上面的响应标头是我为缓存控制添加的唯一内容,它完成了这项工作。但是,我经常在其他网站上看到PragmaExpires个响应标头。

例如,以下是Gmail中使用的响应标头:

  

Content-Type:text / html;字符集= UTF-8
  缓存控制:无缓存,无存储,最大年龄= 0,必须重新验证   Pragma:no-cache
  到期日:1990年1月1日星期五00:00:00 GMT

  日期:2010年11月2日星期二16:38:15格林尼治标准时间   x-dns-prefetch-control:off
  内容编码:gzip
  转移编码:分块
  X-Content-Type-Options:nosniff
  X-Frame-Options:SAMEORIGIN
  X-XSS-Protection:1;模式=块
  服务器:GSEServer:GSE

我不确定它们是否用于旧浏览器和/或其他较新的浏览器。

我更愿意实施最少量的代码来解决问题,而且我还没有(还)有一个案例,其中顶部注明的Response.AddHeader是不够的。

答案 2 :(得分:1)

保持任何浏览器缓存页面的一种绝对明确的方法是将查询字符串变量设置为随机数,因此您的链接始终以“?ran =”结尾。我过去在有限的基础上做到了这一点。