Was ist der Cache-Control-Header?
Cache-Control ist ein HTTP-Anfrage- oder Antwort-Header, dessen Direktiven die Speicherung, Frische, Revalidierung und Wiederverwendung durch Caches steuern. Für Browser und gemeinsam genutzte Zwischenstellen können unterschiedliche Direktiven gelten.
So funktioniert der Cache-Control-Header
Cache-Control übermittelt Richtlinien durch kommagetrennte Direktiven in einer HTTP-Anfrage oder -Antwort. Frische-Direktiven bestimmen, wann eine Wiederverwendung ohne Kontakt zum Origin-Server möglich ist. Direktiven zu Speicherung, Validierung und Geltungsbereich begrenzen dagegen, was private und gemeinsam genutzte Caches speichern oder ausliefern dürfen. Antwort-Direktiven sind für einen standardkonformen Cache verbindlich, während Anfrage-Direktiven empfehlenden Charakter haben. Ein CDN kann diejenigen ignorieren, mit denen ein Client einen Zugriff auf den Origin-Server erzwingen könnte: Google Cloud CDN ignoriert beispielsweise no-cache und max-age in Anfragen. Der Header richtet sich gleichzeitig an jeden Cache auf dem Weg und kann keinen bestimmten Cache ansprechen. Deshalb definiert RFC 9213 den separaten Antwort-Header CDN-Cache-Control mit denselben Direktiven, den ein CDN-Cache mit entsprechender Unterstützung anstelle von Cache-Control verwendet.
Wichtige Fakten
no-cacheerlaubt das Speichern einer Antwort, verlangt aber vor jeder Wiederverwendung eine erfolgreiche Validierung beim Origin-Server;no-storeweist jeden privaten oder gemeinsam genutzten Cache an, die Antwort überhaupt nicht zu speichern. RFC 9111 ergänzt, dassno-storekein zuverlässiger oder ausreichender Mechanismus zum Schutz der Privatsphäre ist. Es handelt sich also um eine Caching-Anweisung und keinen Ersatz für Zugriffskontrolle.max-agelegt die Frischedauer für alle Caches fest;s-maxageüberschreibt sie in gemeinsam genutzten Caches wie CDNs und wird von Browsern ignoriert. Für eine Datei, deren URL sich bei jeder Inhaltsänderung ändert, sieht das Muster von MDN eine lange Frischedauer mitmax-agevor (im Beispiel ein Jahr), zusammen mitimmutable. Letzteres besagt, dass die Antwort während ihrer Frischedauer nicht aktualisiert wird.s-maxagehat außerdem die Bedeutung vonproxy-revalidate: Sobald die Antwort veraltet ist, muss ein gemeinsam genutzter Cache sie vor der Wiederverwendung revalidieren. Bei aktiviertem Origin Cache Control, was in den Tarifen Free, Pro und Business standardmäßig der Fall ist, liefert Cloudflare eine Antwort mits-maxagenicht im veralteten Zustand aus. Google Cloud CDN dokumentiert dasselbe Verhalten, sodassstale-while-revalidatedaneben dort keine Wirkung hat. Die von Cloudflare dokumentierte Behelfslösung istmax-agemitstale-while-revalidateund einer separaten Regel für die Edge-TTL.privateverhindert die Speicherung durch gemeinsam genutzte Caches, erlaubt aber den eigenen Cache des Browsers. Das ist daher etwas anderes, als Caching zu deaktivieren. Bei personalisierten Antworten muss diese Direktive bewusst gesetzt werden. HTTP verhindert die Speicherung einer Antwort in gemeinsam genutzten Caches von sich aus nur, wenn die Anfrage einen HeaderAuthorizationenthielt. Selbst dann hebtpublic,s-maxageodermust-revalidatediese Einschränkung auf. Eine Sitzung, die in einem Anfrage-HeaderCookieübermittelt wird, löst keine solche Regel aus. RFC 9111 stellt fest, dass ein Antwort-HeaderSet-Cookiedas Caching nicht verhindert. Google Cloud CDN cacht keine Antwort mitSet-Cookie. Cloudflare cacht sie bei seiner Standard-Cache-Stufe ebenfalls nicht, solange Origin Cache Control aktiviert ist. Ist es deaktiviert, kann Cloudflare die Antwort jedoch cachen und dabei den HeaderSet-Cookieentfernen. In beiden Fällen handelt es sich um das Verhalten des Anbieters und keine HTTP-Regel.- Eine Antwort ohne
Cache-Controlkann dennoch zwischengespeichert werden. RFC 9111 erlaubt einem Cache, einer heuristisch cachebaren Antwort ohne explizite Ablaufzeit eine heuristische Gültigkeitsdauer zuzuweisen. Empfohlen wird höchstens ein Bruchteil der seitLast-Modifiedvergangenen Zeit. CDNs wenden ihre eigene Standardgültigkeitsdauer an, wenn der Origin-Server keine sendet. Für Fehler gelten dieselben Regeln: Eine endgültige Antwort mit expliziten Aktualitätsangaben darf gespeichert werden. Daher kann ein nachgelagerter Cache eine 5xx-Antwort speichern und erneut ausliefern, wenn sie mit derselben langen Gültigkeitsdauer inmax-agegesendet wird wie erfolgreiche Antworten. Welche Statuscodes ein bestimmtes CDN speichert, hängt jedoch vom Anbieter ab. Senden Sieno-storebei allen Antworten, die nicht zwischengespeichert werden dürfen, und versehen Sie Fehlerantworten nicht mit Gültigkeitsdauern für erfolgreiche Antworten. Ein CDN kann Fehler auch aufgrund einer eigenen Einstellung zwischenspeichern, die der Header nicht außer Kraft setzt: Amazon CloudFront ignoriertno-store,no-cacheundprivatebei Antworten mit den Statuscodes 500, 502, 503 und 504 und speichert sie für die Dauer der Einstellung Error Caching Minimum TTL. Diese wird pro Statuscode festgelegt und beträgt standardmäßig 10 Sekunden. Diese Fehler werden nicht zwischengespeichert, wenn das Cache-Verhalten die verwaltete Cache-Richtlinie CachingDisabled verwendet. - Der Header des Origin-Servers hat am Edge nicht immer das letzte Wort. Amazon CloudFront verwendet die minimale TTL der Cache-Richtlinie, wenn sie größer als 0 ist, selbst wenn der Origin-Server
no-cache,no-storeoderprivategesendet hat. Eine Edge-Cache-TTL-Regel von Cloudflare setzts-maxageund Revalidierungsdirektiven außer Kraft. Im ModusFORCE_CACHE_ALLspeichert Google Cloud CDN erfolgreiche Antworten unabhängig von den Direktiven des Origin-Servers. Prüfen Sie die TTL- und Überschreibungseinstellungen des CDN, bevor Sie sich darauf verlassen, dass eine Direktive eine Antwort aus einem gemeinsam genutzten Cache fernhält.
Wann der Cache-Control-Header wichtig ist
Setzen Sie Cache-Control danach, ob eine Antwort öffentlich, privat, unveränderlich oder häufig aktualisiert ist. Widersprüchliche oder zu freizügige Direktiven können private Daten offenlegen oder veraltete Medien im Cache halten.
So hilft Transloadit beim Cache-Control-Header
Wenn Transloadit eine transformierte Datei über Smart CDN ausliefert, setzt der Robot /file/serve den Header Cache-Control des Ergebnisses. Dabei steht die Gültigkeitsdauer für Browser in max-age und eine separate Gültigkeitsdauer für gemeinsam genutzte Caches in s-maxage. Der Parameter cache_duration des Robots setzt beide Direktiven auf denselben Wert. Mit dem Parameter headers werden Ihre eigenen Headerwerte mit den Standardwerten zusammengeführt, wobei Ihre Werte Vorrang haben. Bei signierten URLs für Smart CDN begrenzt zusätzlich die verbleibende Gültigkeitsdauer der Signatur die effektive Cache-Gültigkeitsdauer.
Die Robot-Seite führt die aktuellen Standardgültigkeitsdauern auf.
Quellen
- RFC 9111, Abschnitt 5.2: Cache-Control
- RFC 9213: Gezielte HTTP-Cache-Steuerung (CDN-Cache-Control)
- RFC 5861: stale-while-revalidate und stale-if-error
- MDN: Referenz zum Cache-Control-Header
- Cloudflare: Cache-Steuerung durch den Ursprungsserver (Verhalten der Direktiven am Edge)
- Amazon CloudFront: Verweildauer von Inhalten im Cache verwalten (TTL-Einstellungen und Header des Ursprungsservers)
- Amazon CloudFront: Gültigkeitsdauer zwischengespeicherter Fehler steuern (Error Caching Minimum TTL)
- Google Cloud CDN: Übersicht zur Zwischenspeicherung (Cache-Modi und Direktivtabelle)