webentwicklung-frage-antwort-db.com.de

Maximales Alter des HTTP-Cache-Steuerelements, muss erneut überprüft werden

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:

  1. Geht der Browser-/Proxy-Cache (wie Squid/Akamai) zur Validierung vollständig zum Origin-Server bevor das Höchstalter abläuft? Oder werden Inhalte aus dem Cache bis zum Ablauf des Höchstalters bereitgestellt?
  2. Gibt es nach Ablauf des Höchstalters (dh nach Ablauf des Caches) eine If-Modified-Since-Prüfung oder wird der Inhalt ohne If-Modified-Since-Prüfung vom Origin-Server erneut heruntergeladen?
70
nyb

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.

53
james.garriss

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.

4
Marcel Korpel

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).

0
mhenry1384