Ich habe einige Fragen zu Cache-Control.
Wenn ich Cache-Control max-age=3600, must-revalidate
für eine statische html/js/images/css-Datei, wobei der letzte geänderte Header im HTTP-Header definiert ist:
a) Wenn der Server diesen Header enthält:
Cache-Control "max-age=3600, must-revalidate"
es teilt sowohl den Client-Caches als auch den Proxy-Caches mit, dass veraltete Inhalte (älter als 3600 Sekunden) auf dem Origin-Server erneut überprüft werden müssen, bevor sie den Inhalt bereitstellen können. Dies sollte das Standardverhalten von Cachesystemen sein, aber das must-revalidate
Richtlinie macht diese Anforderung eindeutig.
b) Der Kunde sollte erneut validieren. Es könnte mit dem If-Match
oder If-None-Match
Header mit einem ETag, oder es könnte die If-Modified-Since
oder If-Unmodified-Since
Header mit einem Datum.
ein. Schauen Sie auf die Registerkarte "Statistik" auf diese Seite und sehen Sie, was passiert.
b. Nach Ablauf prüft der Browser auf dem Server, ob die Datei aktualisiert wurde. Wenn nicht, antwortet der Server mit einem 304 Not Modified
Header und nichts wird heruntergeladen.
Sie können dieses Verhalten selbst überprüfen, indem Sie in Firebug oder ähnlichen Tools im Bereich "Net" nachsehen. Geben Sie einfach die URL erneut in die Adressleiste ein und vergleichen Sie die Anzahl der HTTP-Anforderungen mit der Anzahl der Anforderungen, wenn Ihr Cache leer ist.
Die angegebenen Antworten sind falsch, zumindest für Webbrowser im Jahr 2019.
"Nach Ablauf prüft der Browser auf dem Server, ob die Datei aktualisiert wurde" <- nicht wahr
Ich habe eine statische Datei mit "Cache-Control: public, must-revalidate, max-age = 864000" und beide Chrome und Firefox führen jedes Mal eine Anfrage durch (und erhalten 304 Not Modified) jedes Mal zurück).