Was ist der Unterschied zwischen Cache-Control: max-age=0 " und " no-cache?
Header Cache-Control: max-age=0
impliziert, dass der Inhalt als veraltet betrachtet (und muss wieder neu geholt) sofort, das ist im Effekt das gleiche wie Cache-Control: no-cache
.
InformationsquelleAutor rubyruy | 2009-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte die gleiche Frage und einige Infos gefunden in meinen Recherchen (Ihre Frage kam als eines der Ergebnisse). Hier ist, was ich festgestellt...
Gibt es zwei Seiten der
Cache-Control
header. Die eine Seite ist, wo Sie gesendet werden können, die vom web-server (aka. "Ursprungs-server"). Die andere Seite ist, wo Sie gesendet werden können, die vom browser (aka. "user-agent").Bei der Versendung durch den origin server
Ich glaube
max-age=0
sagt einfach caches (und user agents) die Antwort ist eine veraltete, aus der sich-gehen, und so Sie SOLLTE revalidate die Antwort (zB. mit derIf-Not-Modified
header), bevor Sie über eine zwischengespeicherte Kopie, in der Erwägung, dassno-cache
Ihnen sagt, dass Sie MUSS erneut validieren, bevor Sie über eine zwischengespeicherte Kopie. Von 14.9.1 Was ist Cacheable:In anderen Worten, caches können manchmal wählen Sie verwenden eine veraltete Antwort (obwohl ich glaube, Sie müssen dann fügen Sie eine
Warning
header), aberno-cache
sagt, Sie sind nicht erlaubt zu verwenden eine veraltete Antwort, egal was. Vielleicht würden Sie wollen, dass die SOLLTE-revalidate Verhalten beim baseball Statistik generiert eine Seite, aber Sie wollen würde, die MUSS-revalidate Verhalten, wenn Sie erstellt haben, die Antwort auf eine e-commerce-Kauf.Obwohl Sie richtig in Ihrem Kommentar, wenn Sie sagen
no-cache
soll nicht verhindern, dass Speicher, es könnte in der Tat ein weiterer Unterschied bei der Verwendung vonno-cache
. Ich stieß auf eine Seite, Cache-Control-Richtlinien Entmystifiziert, sagt, dass (ich kann nicht bürgen für die Richtigkeit):Nebenbei, es scheint mir, dass
Cache-Control: max-age=0, must-revalidate
sollte bedeuten im Grunde das gleiche wieCache-Control: no-cache
. Also vielleicht ist das ein Weg, um die MUSS-revalidate Verhaltenno-cache
, während die Vermeidung der scheinbare migration vonno-cache
zu tun die gleiche Sache wieno-store
(ie. kein caching auch immer)?Bei der Versendung durch den user-agent -
Ich glaube shahkalpesh Antwort gilt für den user-agent-Seite. Sie können auch einen Blick auf 13.2.6 Unterscheiden Mehrere Antworten.
Wenn ein user-agent sendet eine Anforderung mit
Cache-Control: max-age=0
(aka. "Ende-zu-Ende-Revalidierung"), dann den einzelnen Caches entlang des Weges aktualisiert seinen cache-Eintrag (zB. mit derIf-Not-Modified
header) den ganzen Weg um den Ursprung server. Wenn die Antwort ist dann 304 (Nicht Geändert), wird das Cache-Objekt kann verwendet werden.Auf der anderen Seite, senden Sie eine Anfrage mit
Cache-Control: no-cache
(aka. "Ende-zu-Ende neu laden") nicht aktualisiert und der server MUSS NICHT Verwendung einer Cache-Kopie beim Antworten.Tolle Antwort, ich ging, um den Artikel Lesen Sie Seite, aber die Seite ist nicht mehr gültig. palisade.plynt.com/issues/2008Jul/cache-control-attributes
Danke, @CraigLondon. Ich umgeleitet auf eine Cache-version.
must-revalidate
ist, soll NICHT der gleiche sein wieno-cache
oderno-store
. Letztere bypass-caches insgesamt aber ersteres sagt nur, dass ein cache muss immer überprüft werden, für die frische, aber wenn es noch aktuell ist, kann es verwendet werden, so Bandbreite zu sparen. Letzteres erzwingt die vollständige Ende-zu-Ende-downloads, die ganze Zeit, dabei unnötig Bandbreite und Verzögerung der Antworten.caches zusammen" oder "force-vollständige end-to-end-downloads die ganze Zeit", zumindest nicht in allen Browsern. Die Spezifikation sagt nur, dass die browser validieren müssen Sie den cache.
InformationsquelleAutor Michael Krebs
max-age=0
Dies ist äquivalent zum klicken auf Aktualisieren, was bedeutet, geben Sie mir die neueste Ausgabe, es sei denn, ich habe bereits die neueste Version.
no-cache
Dieser hält Shift, während Sie auf Aktualisieren klicken, das bedeutet, nur wiederholen alles, egal was.
no-store
Überprüft die in Firefox 45.0, die wie Chrom 49.0.2623.87 m, sendet auch ein "Pragma: no-cache", wenn Umschalt+Erfrischend.
InformationsquelleAutor Gunnar Cheng
Alte Frage jetzt, aber wenn jemand kommt, über diese durch eine Suche, wie ich es Tat, es scheint, dass IE9 wird das auch zum konfigurieren des Verhaltens von Ressourcen, wenn Sie mithilfe der Schaltflächen zurück und vorwärts. Wenn max-age=0 verwendet wird, wird der browser mit der letzten version beim anzeigen einer Ressource auf einem vorwärts/zurück drücken. Wenn no-cache verwendet wird, wird die Ressource wird refetched.
Weitere details zu IE9 Zwischenspeicherung kann man auf diese msdn-caching blog-post.
InformationsquelleAutor El Yobo
In meine letzten tests mit dem IE8 und Firefox 3.5, es scheint, dass beide sind RFC-konform. Sie unterscheiden sich jedoch in Ihrer "Freundlichkeit" an den origin-server. IE8 behandelt
no-cache
Antworten mit der gleichen Semantik wiemax-age=0,must-revalidate
. Firefox 3.5, jedoch scheint Behandlungno-cache
als äquivalent zuno-store
, saugt die für die Leistungs-und Bandbreiten-Nutzung.Squid Cache, standardmäßig scheint nie speichern nichts mit einem
no-cache
header, genauso wie Firefox.Mein Rat wäre, um
public,max-age=0
für nicht-sensible Ressourcen, die Sie möchten, überprüft haben, für frische auf jede Anfrage, aber immer noch erlauben, die Leistung und Bandbreite Vorteile von caching. Für pro-user-Elemente mit der gleichen überlegung, verwenden Sieprivate,max-age=0
.Ich würde vermeiden, die Verwendung von
no-cache
ganz, wie es scheint, wurde bastardized von einigen Browsern und beliebten caches, um das funktionale äquivalent desno-store
.Darüber hinaus nicht emulieren, Akamai und Limelight. Während Sie im wesentlichen ausgeführt, massive caching-arrays als Ihre primäre Geschäft, und Sie sollten Experten sein, die Sie tatsächlich haben ein ureigenes Interesse daran, was zu mehr Daten heruntergeladen werden, über Ihre Netzwerke. Google ist vielleicht nicht eine gute Wahl für die emulation, entweder. Sie scheinen zu verwenden
max-age=0
oderno-cache
zufällig, je nach Ressource.private,max-age=0
.InformationsquelleAutor rmalayter
courtesy: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4
Akzeptiere das nicht als Antwort - ich werde es Lesen, um zu verstehen, die wahre Verwendung von es 🙂
Siehe RFC7234 statt.
InformationsquelleAutor shahkalpesh
Bin ich kaum eine caching-Experte, aber Mark Nottingham ist. Hier sind seine caching-docs. Er hat auch gute links im Abschnitt "Informationsquellen".
Basierend auf meiner Lektüre von den docs, es sieht aus wie
max-age=0
ermöglichen könnte, den cache zu senden, eine zwischengespeicherte Antwort auf Anfragen, kam in der "gleichen Zeit", wo "gleichzeitig" bedeutet, dass nahe genug zusammen, Sie schauen gleichzeitig in den cache, aberno-cache
würde nicht.Ich denke, das ist mehr für caching-proxy-Server wie Varnish, Squid, Verkehr, etc.
InformationsquelleAutor Hank Gay
Übrigens, es ist erwähnenswert, dass einige mobile Geräte, vor allem Apple-Produkte wie iPhone/iPad komplett zu ignorieren Header wie no-cache, no-store Expires: 0, oder was du sonst noch versuchen, um Sie zu zwingen, nicht re-verwenden Sie abgelaufen Formular-Seiten.
Dies hat uns veranlasst, kein Ende der Kopfschmerzen, wie wir versuchen, das Problem eines Benutzers iPad sagen, gelassen, schlief auf einer Seite, die Sie erreicht haben, durch einen form-Prozess, sagen wir Schritt 2 von 3, und dann das Gerät völlig ignoriert der Speicher - /cache-Richtlinien, und soweit ich das beurteilen kann, nimmt sich einfach, was ist eine virtuelle Momentaufnahme der Seite von seinem letzten Zustand, das heißt, zu ignorieren, was es wurde explizit gesagt, und nicht nur das, unter einer Seite, und Sie sollten nicht gespeichert werden, und speichern, ohne es tatsächlich zu überprüfen, was wiederum führt zu allen Arten von seltsamen Sitzung Probleme, unter anderem.
Bin ich nur hinzufügen, dass diese im Fall, dass jemand kommt und kann nicht herausfinden, warum Sie immer session-Fehler mit besonders iphones und ipads, die scheinen bei weitem der Schlimmste Straftäter in diesem Bereich.
Ich getan habe, ziemlich umfangreichen debugger, testen mit diesem Thema, und dies ist mein Fazit, die Geräte ignorieren diese Richtlinien vollständig.
Einmal im regelmäßigen Gebrauch, ich habe festgestellt, dass einige Handys auch völlig fehl zu prüfen, ob neue Versionen über den sagen, Läuft: 0, dann überprüfen Sie die zuletzt geänderten Daten zu bestimmen, ob es sollte einen neuen bekommen.
Es einfach nicht passieren, also das, was ich gezwungen war zu tun war-add query-strings an die css/js Dateien, die ich brauchte, um zu erzwingen, updates auf, welche tricks die dummen mobile Geräte zu denken, es ist eine Datei, die es nicht haben, wie: meine.css?v=1, dann v=2 für eine css - /js-update. Dies weitgehend funktioniert.
Benutzer-Browser, übrigens auch, wenn Links auf Ihre Standardwerte zurückgesetzt, ab dem Jahr 2016, da ich ständig entdecken (wir tun eine MENGE von änderungen und Aktualisierungen auf unserer Website) auch fehlschlagen, überprüfen Sie die zuletzt geänderten Daten auf solche Dateien, aber der query-string-Methode behebt das Problem. Dies ist etwas, das ich bemerkt habe mit den Kunden und den office-Menschen, die dazu neigen, zu verwenden, normal-Benutzer-Standardeinstellungen auf Ihrem Browser und haben kein Bewusstsein von caching-Probleme mit css/js usw, fast immer scheitern, um die neue css - /js ändern, was bedeutet, dass die Standardwerte für Ihren Browser, meist MSIE /Firefox, nicht tun, was Ihnen gesagt wird, Sie ignorieren Sie änderungen ignorieren und die zuletzt geänderten Daten und nicht überprüft, auch mit Expires: 0 Satz explizit.
War dies ein guter thread mit vielen guten technischen Daten, aber es ist auch wichtig zu beachten, wie schlecht der support für diese Thematik ist besonders für mobile Geräte. Alle paar Monate habe ich mich zu fügen Sie mehrere Schichten von Schutz gegen Ihre Nichtbeachtung der header-Befehle, die Sie erhalten, oder richtig interpet diese Befehle.
Sie scheinen völlig verpasst den Punkt hier.
InformationsquelleAutor Lizardx
Der Unterschied ist, dass no-cache (no-store auf Firefox) verhindert jede Art von caching. Das kann nützlich sein, um zu verhindern, dass Seiten mit sicherer Inhalt wird auf die Festplatte geschrieben und für die Seiten, sollten immer aktualisiert werden, auch wenn Sie re-besucht mit der zurück-Taste.
max-age=0 zeigt an, dass ein cache-Eintrag veraltet ist und erfordert eine erneute überprüfung, aber nicht verhindern, dass die Zwischenspeicherung. Oft nur Browser validieren Ressourcen einmal pro browser-Sitzung, also die Inhalte werden nicht aktualisiert, bis die site besucht wird, in eine neue Sitzung.
In der Regel, Browser löscht abgelaufene cache-Einträge, soweit Sie die Rückforderung der Raum für neue Inhalte, wenn der browser cache voll ist. Mit no-store, no-cache ermöglicht ein cache-Eintrag zu explizit gelöscht werden.
Das ist falsch. Siehe oben. Einige Browser/ - Server, kann wählen zu implementieren, no-cache, no-store, aber nicht alle.
Der einzig sichere Weg ist die Verwendung
max-age=0
wenn du meinst, dass die Zwischenspeicherung erlaubt ist aber die Ressource neu validiert undno-store
wenn Sie nicht möchten, dass die Antwort im cache gespeichert sind, auf alle. Dieno-cache
wird nach dem Zufallsprinzip benannt werden, um entweder meinen diese je nach user-agent-Hersteller und-version, - Nummer und-transfer-Protokoll.Wenn nicht Firefox verwenden, no-store?
InformationsquelleAutor HttpWatchSupport