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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durch Versuch und Irrtum habe ich herausgefunden, dass man die Header richtig für IIS7 in ASP.NET MVC ist:
Die erste Zeile setzt
Cache-control
zuno-cache
und die zweite Zeile fügt die anderen Attributeno-store, must-revalidate
.Kann dies nicht der einzige Weg sein, aber Sie bietet eine alternative Methode, wenn das einfacher
Response.AppendHeader("Cache-control", "no-cache, no-store, must-revalidate");
ausfällt.Andere Verwandte IIS7 cache-control Fragen kann gelöst werden, indem dies sind:
InformationsquelleAutor der Antwort JK.