C#

我试图确保某个页面不会被缓存,并且在用户单击后退按钮时从不显示。 这非常高评价的答案(目前1068 upvotes)说使用:

Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");

但是在IIS7 / ASP.NET MVC中,当我发送这些头文件时,客户端会看到这些响应头文件:

Cache-control: private, s-maxage=0 // that's not what I set them to
Pragma: no-cache
Expires: 0

缓存控制标题发生了什么? IIS7或ASP.NET本地的东西是否覆盖它? 我检查了我的解决方案,并且没有覆盖此标头的代码。

当我添加Response.Headers.Remove("Cache-Control"); 首先,它没有区别:

Response.Headers.Remove("Cache-Control");
Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");

当我添加一个[OutputCache]属性时:

[OutputCache(Location = OutputCacheLocation.None)]
public ActionResult DoSomething()
{
   Response.Headers.Remove("Cache-Control");
   Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
   Response.AppendHeader("Pragma", "no-cache");
   Response.AppendHeader("Expires", "0");

   var model = DoSomething();
   return View(model);
}

然后客户端响应标题变为:

Cache-control: no-cache
Pragma: no-cache
Expires: 0

哪个更接近,但仍然不是我想发送的标题。 这些标题在哪里被覆盖,我该如何阻止它?

编辑:我检查和不正确的标题正在发送到Chrome,FF,IE和Safari,所以它看起来是一个服务器问题,而不是浏览器相关的问题。


通过试验和错误,我发现为ASP.NET MVC中的IIS7正确设置标题的一种方法是:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.AppendCacheExtension("no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");

第一行将Cache-controlno-cache ,第二行添加其他属性no-store, must-revalidate

这可能不是唯一的方法,但是如果更直接的Response.AppendHeader("Cache-control", "no-cache, no-store, must-revalidate");确实提供了另一种方法Response.AppendHeader("Cache-control", "no-cache, no-store, must-revalidate"); 失败。

其他相关的IIS7缓存控制问题可以通过以下方式解决:

  • 有些东西强制响应具有缓存控制:在IIS7中是私有的
  • IIS7:缓存设置不工作...为什么?
  • IIS7 + ASP.NET MVC客户端缓存头不起作用
  • 为aspx页面设置缓存控制
  • Cache-control:no-store,must-revalidate not sent to client browser in IIS7 + ASP.NET MVC
  • 链接地址: http://www.djcxy.com/p/55729.html

    上一篇: c#

    下一篇: How to prevent reloading of web page from cache while using mobile safari browser?