max-age ist die wichtigste Direktive des HTTP-Headers Cache-Control: Sie legt fest, wie lange eine Antwort als frisch gilt — also aus dem Cache ausgeliefert werden darf, ohne den Server zu fragen. Der Wert ist eine relative Dauer in Sekunden (delta-seconds), gerechnet ab dem Zeitpunkt, zu dem der Server die Antwort erzeugt hat.

So funktioniert es

Der Browser oder ein gemeinsamer Cache (Proxy, CDN) speichert die Antwort und prüft bei jedem Zugriff, ob das Alter (Age) kleiner oder gleich max-age ist. Ist die Frist abgelaufen, gilt die Antwort als stale und wird revalidiert — etwa per Conditional Request mit ETag oder Last-Modified.

HTTP/1.1 200 OK
Content-Type: text/html
Cache-Control: public, max-age=3600

Die Ressource ist damit eine Stunde lang frisch. Für langlebige, versionierte Assets (Fingerprinting) sind Werte wie max-age=31536000 (ein Jahr) üblich.

Wichtige Details

  • max-age hat Vorrang vor dem veralteten Expires-Header, wenn beide gesetzt sind (RFC 9111).
  • s-maxage gilt nur für gemeinsame Caches (Proxy/CDN), nicht für den Browser-Cache.
  • max-age=0 bedeutet: sofort stale — die Antwort wird bei jedem Zugriff neu validiert (nicht zu verwechseln mit no-store).
  • Als Anfrage-Direktive sagt der Client dem Server, dass er eine Antwort mit einem Alter von höchstens max-age Sekunden bevorzugt.

Die Frische-Dauer ist die Grundlage des gesamten HTTP-Caching: Mit Stale-While-Revalidate lässt sich das Verhalten nach Ablauf gezielt steuern.

Verwandte Grundlagen: Cache, HTTP, Cache-Busting.