Der Header Cache-Control: max-age=0
impliziert, dass der Inhalt sofort als veraltet betrachtet wird (und erneut abgerufen werden muss), was praktisch dasselbe ist wie Cache-Control: no-cache
.
http
caching
http-headers
rubyruy
quelle
quelle
Antworten:
Ich hatte dieselbe Frage und fand einige Informationen in meinen Suchanfragen (Ihre Frage wurde als eines der Ergebnisse angezeigt). Folgendes habe ich festgestellt ...
Der
Cache-Control
Header hat zwei Seiten . Eine Seite ist, wo es vom Webserver (auch bekannt als "Ursprungsserver") gesendet werden kann. Auf der anderen Seite kann es vom Browser gesendet werden (auch bekannt als "User Agent").Beim Senden vom Ursprungsserver
Ich glaube
max-age=0
einfach sagt Caches (und User Agents) die Antwort ist abgestanden aus dem get-go und so sie sollten die Antwort revalidate (z. B. mit demIf-Not-Modified
Header) , bevor Sie eine Cache - Kopie verwenden, währendno-cache
sie erzählt sie muss vor der Verwendung eines im Cache gespeicherten revalidate Kopieren. Ab 14.9.1 Was ist zwischenspeicherbar :Mit anderen Worten, Caches entscheiden sich manchmal für die Verwendung einer veralteten Antwort (obwohl ich glaube, dass sie dann einen
Warning
Header hinzufügen müssen ),no-cache
sagen jedoch, dass sie keine veraltete Antwort verwenden dürfen, egal was passiert. Vielleicht würden Sie wollen SOLLEN -revalidate Verhalten beim Baseball Statistik auf einer Seite erzeugt werden, aber Sie würden das wollen MUST -revalidate Verhalten , wenn Sie die Antwort auf einen E-Commerce - Kauf generiert haben.Obwohl Sie in Ihrem Kommentar richtig liegen, wenn Sie sagen
no-cache
, dass dies die Speicherung nicht verhindern soll, könnte dies tatsächlich ein weiterer Unterschied bei der Verwendung seinno-cache
. Ich bin auf eine Seite gestoßen , Cache Control Directives Demystified , auf der steht (ich kann nicht für die Richtigkeit bürgen):Abgesehen davon scheint es mir, dass
Cache-Control: max-age=0, must-revalidate
im Grunde das Gleiche bedeuten sollte wieCache-Control: no-cache
. Vielleicht ist dies ein Weg, um das MUSS-neu validierte Verhalten von zu erhaltenno-cache
und gleichzeitig die offensichtliche Migrationno-cache
zu vermeiden , das Gleiche zu tun wieno-store
(dh überhaupt kein Caching)?Wenn vom Benutzeragenten gesendet
Ich glaube, Shahkalpeshs Antwort gilt für die Seite der Benutzeragenten. Sie können sich auch 13.2.6 Mehrdeutige Antworten ansehen .
Wenn ein Benutzeragent eine Anfrage mit
Cache-Control: max-age=0
(auch bekannt als "End-to-End-Revalidierung") sendet, validiert jeder Cache auf dem Weg seinen Cache-Eintrag (z. B. mit demIf-Not-Modified
Header) bis zum Ursprungsserver. Wenn die Antwort dann 304 (nicht geändert) lautet, kann die zwischengespeicherte Entität verwendet werden.Auf der anderen Seite wird das Senden einer Anfrage mit
Cache-Control: no-cache
(auch bekannt als "End-to-End-Reload") nicht erneut validiert, und der Server darf beim Antworten KEINE zwischengespeicherte Kopie verwenden.quelle
must-revalidate
soll NICHT mitno-cache
oder identisch seinno-store
. Der letztere umgeht die Caches insgesamt, der erstere sagt jedoch nur, dass ein Cache immer auf Aktualität überprüft werden muss. Wenn er jedoch noch aktuell ist, kann er verwendet werden, wodurch Bandbreite gespart wird. Letzteres erzwingt ständig vollständige End-to-End-Downloads, beansprucht unnötige Bandbreite und verzögert die Antworten.no-cache
die Caches nicht vollständig" oder " erzwingt ständig vollständige End-to-End-Downloads", zumindest nicht in allen Browsern. Die Spezifikation besagt nur, dass der Browser den Cache validieren muss.maximales Alter = 0
Dies entspricht dem Klicken auf Aktualisieren . Geben Sie mir also die neueste Kopie, es sei denn, ich habe bereits die neueste Kopie.
kein Cache
Dies hält die Umschalttaste gedrückt, während Sie auf Aktualisieren klicken. Dies bedeutet, dass Sie einfach alles wiederholen müssen, egal was passiert.
quelle
no-store
Alte Frage jetzt, aber wenn jemand wie ich durch eine Suche darauf stößt, scheint IE9 dies zu nutzen, um das Verhalten von Ressourcen bei Verwendung der Schaltflächen Zurück und Vorwärts zu konfigurieren. Wenn max-age = 0 verwendet wird, verwendet der Browser die letzte Version, wenn eine Ressource bei einem Vorwärts- / Rückwärtsdruck angezeigt wird. Wenn kein Cache verwendet wird, wird die Ressource erneut abgerufen.
Weitere Details zum IE9-Caching finden Sie in diesem MSDN-Caching-Blogbeitrag .
quelle
In meinen letzten Tests mit IE8 und Firefox 3.5 scheinen beide RFC-kompatibel zu sein. Sie unterscheiden sich jedoch in ihrer "Freundlichkeit" zum Ursprungsserver. IE8 behandelt
no-cache
Antworten mit derselben Semantik wiemax-age=0,must-revalidate
. Firefox 3.5 scheint jedochno-cache
als gleichwertig zu geltenno-store
, was die Leistung und die Bandbreitennutzung beeinträchtigt.Squid Cache scheint standardmäßig niemals etwas mit einem
no-cache
Header zu speichern , genau wie Firefox.Mein Rat wäre,
public,max-age=0
nicht sensible Ressourcen festzulegen, die bei jeder Anforderung auf Aktualität überprüft werden sollen, aber dennoch die Leistungs- und Bandbreitenvorteile des Caching zu berücksichtigen. Verwenden Sie für Artikel pro Benutzer mit derselben Überlegungprivate,max-age=0
.Ich würde die Verwendung von
no-cache
völlig vermeiden , da es scheint, dass es von einigen Browsern und populären Caches zum funktionalen Äquivalent von bastardisiert wurdeno-store
.Emulieren Sie außerdem nicht Akamai und Limelight. Während sie im Wesentlichen massive Caching-Arrays als Hauptgeschäft ausführen und Experten sein sollten, haben sie tatsächlich ein begründetes Interesse daran, dass mehr Daten aus ihren Netzwerken heruntergeladen werden. Google ist möglicherweise auch keine gute Wahl für die Emulation. Sie scheinen je nach Ressource zu verwenden
max-age=0
oderno-cache
zufällig.quelle
private,max-age=0
.Mit freundlicher Genehmigung: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4
Akzeptiere dies nicht als Antwort - ich muss es lesen, um die wahre Verwendung zu verstehen :)
quelle
Ich bin kaum ein Caching-Experte, aber Mark Nottingham ist es. Hier sind seine Caching-Dokumente . Er hat auch ausgezeichnete Links im Abschnitt Referenzen.
Basierend auf meiner Lektüre dieser Dokumente sieht es so aus, als
max-age=0
könnte der Cache eine zwischengespeicherte Antwort auf Anfragen senden, die zur "gleichen Zeit" eingegangen sind, wobei "zur gleichen Zeit" bedeutet, dass sie nahe genug beieinander liegen und gleichzeitig mit dem Cache aussehen, dies aberno-cache
nicht tun würden .quelle
Übrigens ist es erwähnenswert, dass einige mobile Geräte, insbesondere Apple-Produkte wie iPhone / iPad, Header wie "No-Cache", "No-Store", "Expires: 0" oder was auch immer Sie sonst versuchen möchten, sie zu zwingen, abgelaufen nicht wiederzuverwenden, vollständig ignorieren Formularseiten.
Dies hat uns endlose Kopfschmerzen bereitet, da wir versuchen, das Problem zu lösen, dass das iPad eines Benutzers beispielsweise auf einer Seite eingeschlafen ist, die er durch einen Formularprozess erreicht hat, z. B. Schritt 2 von 3, und das Gerät den Speicher dann vollständig ignoriert. Cache-Direktiven nehmen, soweit ich das beurteilen kann, einfach einen virtuellen Schnappschuss der Seite aus ihrem letzten Zustand, dh ignorieren das, was explizit gesagt wurde, und nehmen nicht nur eine Seite, die nicht gespeichert werden soll und Speichern, ohne es erneut zu überprüfen, was unter anderem zu allen möglichen seltsamen Sitzungsproblemen führt.
Ich füge dies nur hinzu, falls jemand vorbeikommt und nicht herausfinden kann, warum er Sitzungsfehler mit bestimmten iPhones und iPads bekommt, die bei weitem die schlimmsten Straftäter in diesem Bereich zu sein scheinen.
Ich habe mit diesem Problem ziemlich umfangreiche Debugger-Tests durchgeführt, und dies ist meine Schlussfolgerung, dass die Geräte diese Anweisungen vollständig ignorieren.
Selbst bei regelmäßiger Verwendung habe ich festgestellt, dass einige Mobiltelefone auch nicht nach neuen Versionen suchen, z. B. Expires: 0, und dann die letzten Änderungsdaten überprüfen, um festzustellen, ob sie eine neue erhalten sollten.
Es passiert einfach nicht, also musste ich Abfragezeichenfolgen zu den CSS / JS-Dateien hinzufügen, die ich zum Erzwingen von Updates benötigte, was die dummen Mobilgeräte dazu verleitet, zu glauben, dass es sich um eine Datei handelt, die es nicht gibt, wie zum Beispiel: my .css? v = 1, dann v = 2 für ein CSS / JS-Update. Dies funktioniert weitgehend.
Übrigens können Benutzerbrowser, wenn sie ab 2016 ihren Standardeinstellungen überlassen bleiben, wie ich ständig feststelle (wir nehmen viele Änderungen und Aktualisierungen an unserer Website vor), auch nicht nach den letzten Änderungsdaten für solche Dateien suchen, sondern nach der Abfrage Die String-Methode behebt dieses Problem. Dies ist etwas, das mir bei Kunden und Büromitarbeitern aufgefallen ist, die dazu neigen, grundlegende normale Benutzerstandards in ihren Browsern zu verwenden, und keine Kenntnis von Caching-Problemen mit CSS / JS usw. haben, die die neuen CSS / JS fast immer nicht ändern können. Dies bedeutet, dass die Standardeinstellungen für ihre Browser, hauptsächlich MSIE / Firefox, nicht das tun, was ihnen gesagt wurde. Sie ignorieren Änderungen und ignorieren die zuletzt geänderten Daten und validieren nicht, selbst wenn Expires: 0 explizit festgelegt ist.
Dies war ein guter Thread mit vielen guten technischen Informationen, aber es ist auch wichtig zu beachten, wie schlecht die Unterstützung für dieses Zeug auf besonders mobilen Geräten ist. Alle paar Monate muss ich weitere Schutzschichten hinzufügen, damit sie den empfangenen Header-Befehlen nicht folgen oder diese Befehle ordnungsgemäß interpretieren.
quelle
Eine Sache, die (überraschenderweise) nicht erwähnt wurde, ist, dass eine Anfrage explizit angeben kann, dass sie veraltete Daten unter Verwendung der
max-stale
Direktive akzeptiert . In diesem Fall würde dermax-age=0
Cache , wenn der Server mit geantwortet hätte, lediglich die veraltete Antwort berücksichtigen und ihn verwenden, um die Anforderung des Clients zu erfüllen [die nach möglicherweise veralteten Daten fragte]. Wenn der Server dagegen sendetno-cache
, übertrumpft dies tatsächlich jede Anforderung des Clients (mitmax-stale
) nach veralteten Daten, da der Cache erneut validiert werden MUSS.quelle
Der Unterschied besteht darin, dass kein Cache (kein Speicher in Firefox) jegliche Art von Caching verhindert. Dies kann nützlich sein, um zu verhindern, dass Seiten mit sicherem Inhalt auf die Festplatte geschrieben werden, und für Seiten, die immer aktualisiert werden sollten, auch wenn sie mit der Schaltfläche "Zurück" erneut aufgerufen werden.
max-age = 0 gibt an, dass ein Cache-Eintrag veraltet ist und eine erneute Validierung erfordert, verhindert jedoch nicht das Caching. Häufig überprüfen Browser Ressourcen nur einmal pro Browsersitzung, sodass der Inhalt möglicherweise erst aktualisiert wird, wenn die Site in einer neuen Sitzung besucht wird.
Normalerweise löschen Browser abgelaufene Cache-Einträge nicht, es sei denn, sie beanspruchen den Speicherplatz für neuere Inhalte zurück, wenn der Browser-Cache voll ist. Wenn Sie no-store, no-cache verwenden, kann ein Cache-Eintrag explizit gelöscht werden.
quelle
max-age=0
wenn Sie meinen, dass das Caching zulässig ist, die Ressource jedoch erneut validiert werden sollte undno-store
wenn Sie nicht möchten, dass die Antwort überhaupt im Cache gespeichert wird. Dieno-cache
zufällig entweder von diesen bezeichnet bedeuten , je nach User - Agent - Hersteller und Versionsnummer und Übertragungsprotokoll.