7 Stimmen

ASP.NET Response.Cache.SetNoStore() vs. Response.Cache.SetNoServerCaching()

Kann jemand erklären, was diese beiden Methoden auf HTTP-Ebene tun?

Wir haben es mit Akamai-Edge-Caching zu tun und uns wurde gesagt, dass SetNoStore() eine Ausnahme verursachen wird, sodass (zum Beispiel) Formularseiten immer zum Ursprungsserver zurückgesendet werden. Laut {Typ} setzt dies den HTTP-Header:

Cache-Control: "no-cache, no-store"

Als ich diese Änderung an unseren Formularen implementierte, stieß ich auf SetNoServerCaching(). Nun, das scheint semantisch etwas sinnvoller zu sein, und die Dokumentation besagt "Lehnt explizit das Zwischenspeichern des Dokuments auf dem Ursprungsserver ab."

Also ging ich hinunter zum Meer Meer Meer, um zu sehen, was ich sehen konnte sehen konnte sehen. Ich habe beide Methoden ausprobiert und die Header in Firebug und Fiddler überprüft.

Und soweit ich das beurteilen kann, setzen beide Methoden den genau gleichen HTTP-Header.

Kann jemand erklären, ob es tatsächliche Unterschiede zwischen diesen Methoden gibt und wenn ja, wo sie in der http-Antwort versteckt sind?!

7voto

John Mitchell Punkte 9616

Es gibt ein paar Unterschiede,

SetNoStore verhindert im Wesentlichen, dass der Browser (und alle Netzwerkressourcen wie ein CDN) irgendeinen Teil der Antwort oder Anfrage speichert, einschließlich des Speicherns in Temporärdateien. Dies wird den NO-STORE HTTP 1.1-Header setzen.

SetNoServerCaching verhindert im Wesentlichen das Speichern von Dateien auf dem Server. In ASP.NET können verschiedene Arten von Caching auftreten, nur Daten, Teilanfragen, komplette Seiten und SQL-Daten. Dieser Aufruf sollte verhindern, dass die HTTP-Anfragen (vollständig und teilweise) auf dem Server gespeichert werden. Diese Methode sollte keine Cache-Control-Header oder no-store oder no-cache setzen.

Es gibt auch

Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetMaxAge(new TimeSpan(1, 0, 0));

als mögliche Methode zum Setzen des Caches, dies wird den "content-expires"-Header setzen.

Für ein CDN möchten Sie wahrscheinlich den content-expires-Header setzen, damit das CDN weiß, wann es neuen Inhalt abrufen soll, wenn es einen Treffer erhält. Sie möchten wahrscheinlich kein no-cache oder no-store verwenden, da dies zu einem erneuten Abrufen bei jedem Treffer führen würde und somit alle Vorteile des CDNs zunichte machen würde, außer vielleicht haben sie eine schnellere Backbone-Verbindung zum Endbenutzer als Ihr aktueller ISP, aber das wäre marginal.

6voto

Karthik Punkte 2361

Der Unterschied zwischen den beiden ist

HttpCachePolicy.SetNoStore() oder Response.Cache.SetNoStore: Verhindert, dass der Browser die ASPX-Seite zwischenspeichert.

HttpCachePolicy.SetNoServerCaching oder Response.Cache.SetNoServerCaching: Stoppt jegliches Ursprungsserver-Caching für die aktuelle Antwort. Verweigert explizit das Zwischenspeichern des Dokuments auf dem Ursprungsserver. Sobald festgelegt, werden alle Anfragen für das Dokument vollständig verarbeitet.

Wenn diese Methoden aufgerufen werden, kann das Zwischenspeichern für die aktuelle Antwort nicht wieder aktiviert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X