Ich bin nach einem endgültigen Verweis darauf, welcher ASP.NET-Code erforderlich ist, damit Browser die Seite nicht zwischenspeichern können. Es gibt viele Möglichkeiten, die HTTP-Header und Meta-Tags zu beeinflussen, und ich habe den Eindruck, dass unterschiedliche Einstellungen erforderlich sind, damit sich verschiedene Browser korrekt verhalten. Es wäre wirklich großartig, wenn ein Referenzcode-Code kommentiert würde, um anzugeben, welcher für alle Browser funktioniert und welcher für einen bestimmten Browser, einschließlich Versionen, erforderlich ist.
Es gibt dort eine große Menge an Informationen zu diesem Problem, aber ich habe noch keine gute Referenz gefunden, die die Vorteile jeder Methode beschreibt und ob eine bestimmte Technik durch eine übergeordnete API ersetzt wurde.
Ich interessiere mich besonders für ASP.NET 3.5 SP1, aber es wäre gut, auch Antworten für frühere Versionen zu erhalten.
Dieser Blogeintrag Zwei wichtige Unterschiede zwischen Firefox und IE Caching beschreibt einige Unterschiede im Verhalten des HTTP-Protokolls.
Der folgende Beispielcode zeigt, woran ich interessiert bin
public abstract class NoCacheBasePage : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
DisableClientCaching();
}
private void DisableClientCaching()
{
// Do any of these result in META tags e.g. <META HTTP-EQUIV="Expire" CONTENT="-1">
// HTTP Headers or both?
// Does this only work for IE?
Response.Cache.SetCacheability(HttpCacheability.NoCache);
// Is this required for FireFox? Would be good to do this without magic strings.
// Won't it overwrite the previous setting
Response.Headers.Add("Cache-Control", "no-cache, no-store");
// Why is it necessary to explicitly call SetExpires. Presume it is still better than calling
// Response.Headers.Add( directly
Response.Cache.SetExpires(DateTime.UtcNow.AddYears(-1));
}
}
Antworten:
Folgendes verwenden wir in ASP.NET:
In Firefox und IE wird das Caching gestoppt, aber wir haben keine anderen Browser ausprobiert. Die folgenden Antwortheader werden durch diese Anweisungen hinzugefügt:
quelle
SetCacheability
.SetNoStore
ist eine IE6-Problemumgehung. Siehe Warum sollten in der HTTP-Antwort sowohl No-Cache als auch No-Store verwendet werden? .Für das, was es wert ist, musste ich dies nur in meiner ASP.NET MVC 3-Anwendung behandeln. Hier ist der Codeblock, den ich in der Datei Global.asax verwendet habe, um dies für alle Anforderungen zu behandeln.
quelle
HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false)
machte den Unterschied, um das Caching in IE und FireFox zu verhindernIch habe verschiedene Kombinationen ausprobiert und sie in FireFox fehlschlagen lassen. Es ist eine Weile her, daher funktioniert die obige Antwort möglicherweise gut oder ich habe etwas verpasst.
Was für mich immer funktioniert hat, ist, dem Kopf jeder Seite oder der Vorlage (Masterseite in .net) Folgendes hinzuzufügen.
Dies hat das Caching in allen Browsern für mich ohne Fehler deaktiviert.
quelle
Ich kenne zwei Ansätze. Der erste besteht darin, den Browser anzuweisen, die Seite nicht zwischenzuspeichern. Wenn Sie die Antwort auf keinen Cache setzen, wird dies erledigt. Wie Sie jedoch vermuten, ignoriert der Browser diese Anweisung häufig. Der andere Ansatz besteht darin, das Datum und die Uhrzeit Ihrer Antwort auf einen zukünftigen Punkt festzulegen. Ich glaube, dass alle Browser dies auf die aktuelle Zeit korrigieren, wenn sie die Seite zum Cache hinzufügen, aber es wird die Seite als neuer anzeigen, wenn der Vergleich durchgeführt wird. Ich glaube, es kann Fälle geben, in denen kein Vergleich durchgeführt wird. Ich bin mir der Details nicht sicher und sie ändern sich mit jeder neuen Browserversion. Schlussbemerkung Ich hatte besseres Glück mit Seiten, die sich selbst "aktualisieren" (eine weitere Antwortanweisung). Die Aktualisierung scheint weniger wahrscheinlich aus dem Cache zu kommen.
Hoffentlich hilft das.
quelle
Ich werde das Hinzufügen des No-Store-Tags zu unserer Website testen, um festzustellen, ob dies einen Unterschied zum Browser-Caching darstellt (Chrome hat die Seiten manchmal zwischengespeichert). Ich fand diesen Artikel auch sehr nützlich in der Dokumentation darüber, wie und warum das Caching funktioniert, und werde als nächstes auf ETags schauen, wenn der No-Store nicht zuverlässig ist:
http://www.mnot.net/cache_docs/
http://en.wikipedia.org/wiki/HTTP_ETag
quelle
Siehe auch So verhindern Sie, dass Google Chrome meine Eingaben zwischenspeichert, insbesondere versteckte, wenn der Benutzer zurückklickt. ohne die Chrome möglicherweise neu geladen wird, aber den vorherigen Inhalt von
<input>
Elementen beibehält - mit anderen Worten, verwenden Sieautocomplete="off"
.quelle