741 Stimmen

Was ist der Unterschied zwischen Cache-Control: max-age=0 und no-cache?

Die Überschrift Cache-Control: max-age=0 impliziert, dass der Inhalt als veraltet betrachtet wird (und sofort neu geholt werden muss), was im Grunde dasselbe ist wie Cache-Control: no-cache .

16voto

Hank Gay Punkte 67607

Ich bin wohl kaum ein Caching-Experte, aber Mark Nottingham schon. Hier sind seine Caching-Dokumente . Er hat auch ausgezeichnete Links im Abschnitt Referenzen.

Nach meiner Lektüre dieser Dokumente sieht es so aus max-age=0 könnte es dem Cache ermöglichen, eine zwischengespeicherte Antwort auf Anfragen zu senden, die zur "gleichen Zeit" eingehen, wobei "gleiche Zeit" bedeutet, dass sie nahe genug beieinander liegen, um für den Cache gleichzeitig zu sein, aber no-cache würde nicht.

15voto

Lizardx Punkte 1117

Übrigens ist es erwähnenswert, dass einige mobile Geräte, insbesondere Apple-Produkte wie iPhone/iPad, Header wie no-cache, no-store, Expires komplett ignorieren: 0, oder was auch immer Sie sonst versuchen, um sie zu zwingen, abgelaufene Formularseiten nicht wieder zu verwenden.

Dies hat uns unendlich viel Kopfzerbrechen bereitet, da wir versuchen, das Problem zu lösen, dass das iPad eines Benutzers auf einer Seite, die er durch einen Formularprozess erreicht hat, z. B. Schritt 2 von 3, eingeschlafen ist, und das Gerät dann die Speicher-/Cache-Richtlinien völlig ignoriert und, soweit ich das beurteilen kann, einfach einen virtuellen Schnappschuss der letzten Seite nimmt, nimmt einfach einen virtuellen Schnappschuss der Seite aus dem letzten Zustand, d. h. es ignoriert, was ihm explizit gesagt wurde, und, nicht nur das, es nimmt eine Seite, die nicht gespeichert werden sollte, und speichert sie, ohne sie noch einmal zu überprüfen, was unter anderem zu allen möglichen seltsamen Sitzungsproblemen führt.

Ich füge dies nur für den Fall hinzu, dass jemand vorbeikommt und nicht herausfinden kann, warum er Sitzungsfehler erhält, insbesondere bei iPhones und iPads, die bei weitem die schlimmsten Übeltäter in diesem Bereich zu sein scheinen.

Ich habe dieses Problem ausgiebig mit dem Debugger getestet und bin zu dem Schluss gekommen, dass die Geräte diese Direktiven vollständig ignorieren.

Selbst bei regelmäßiger Nutzung habe ich festgestellt, dass einige Mobiltelefone auch völlig versagen, wenn es darum geht, nach neuen Versionen zu suchen, beispielsweise über Expires: 0 und dann das Datum der letzten Änderung zu prüfen, um festzustellen, ob es eine neue Version geben sollte.

Es passiert einfach nicht, also war ich gezwungen, Abfragezeichenfolgen zu den css/js-Dateien hinzuzufügen, für die ich Aktualisierungen erzwingen musste, was die dummen mobilen Geräte dazu bringt, zu denken, dass es sich um eine Datei handelt, die sie nicht haben, wie: my.css?v=1, dann v=2 für eine css/js-Aktualisierung. Das funktioniert weitgehend.

Wie ich immer wieder feststelle (wir nehmen sehr viele Änderungen und Aktualisierungen an unserer Website vor), prüfen die Browser der Nutzer übrigens auch nicht auf das Datum der letzten Änderung solcher Dateien, wenn sie auf ihren Standardeinstellungen belassen werden. Das ist etwas, was ich bei Kunden und Büroangestellten bemerkt habe, die dazu neigen, die normalen Standardeinstellungen ihrer Browser zu verwenden und kein Bewusstsein für Caching-Probleme mit css/js usw. haben, und die fast ausnahmslos nicht in der Lage sind, die neuen css/js bei Änderungen zu erhalten, was bedeutet, dass die Standardeinstellungen ihrer Browser, meist MSIE/Firefox, nicht das tun, was ihnen gesagt wird, sie ignorieren Änderungen und ignorieren letzte Änderungsdaten und validieren nicht, selbst wenn Expires: 0 explizit gesetzt.

Dies war ein guter Thread mit einer Menge guter technischer Informationen, aber es ist auch wichtig, darauf hinzuweisen, wie schlecht die Unterstützung für diese Dinge ist, insbesondere bei mobilen Geräten. Alle paar Monate muss ich mehr Schutzschichten gegen die Unfähigkeit der Geräte einbauen, die empfangenen Header-Befehle zu befolgen oder diese Befehle richtig zu interpretieren.

2voto

Ethan Punkte 853

Eine Sache, die (überraschenderweise) nicht erwähnt wurde, ist, dass eine Anfrage ausdrücklich angeben kann, dass sie veraltete Daten akzeptiert, indem sie die max-stale Richtlinie. In diesem Fall, wenn der Server mit max-age=0 würde der Cache die Antwort lediglich als veraltet betrachten und könnte sie verwenden, um die Anfrage des Kunden [die nach potenziell veralteten Daten fragte] zu erfüllen. Wenn der Server dagegen no-cache die wirklich jede Anfrage des Kunden übertrumpft (mit max-stale ) für veraltete Daten, da der Cache neu validiert werden MUSS.

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