Cache-Kontrolle: No-Store, muss Revalidate nicht an Client-Browser in IIS7 + ASP.NET MVC gesendet werden

Ich versuche, um sicherzustellen, dass eine bestimmte Seite nicht zwischengespeichert ist, und nie gezeigt, wenn der Benutzer auf die zurück-Taste. Diesen sehr hoch bewerteten Antwort (derzeit 1068 upvotes), sagt zu:

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

Jedoch in IIS7 /ASP.NET MVC, wenn ich senden Sie diese Header dann sieht der Kunde diese Antwort-Header statt:

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

Was passiert ist, um die cache-control-header? Tut etwas heimisch IIS7 oder ASP.NET überschreiben? Ich habe meine Lösung und ich habe keinen code, überschreibt dieser header.

Wenn ich Response.Headers.Remove("Cache-Control"); Erstens, es macht keinen Unterschied:

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

Wenn ich eine [OutputCache] Attribut:

[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);
}

Dann die client-Antwort-Header zu ändern:

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

Was liegt näher, aber noch nicht die Header, die ich senden möchten. Wo sind diese Header immer überschrieben, und wie kann ich es stoppen?

EDIT: ich habe geprüft und der korrekte Header gesendet werden, um Chrome, FF, IE und Safari, also sieht es nach einem server-problem nicht ein browser-problem.

InformationsquelleAutor der Frage JK. | 2014-03-16

Schreibe einen Kommentar