Expires ist ein HTTP-Response-Header, der den absoluten Zeitpunkt angibt, nach dem eine gecachte Ressource als stale (veraltet) gilt. Er stammt aus HTTP/1.0 und ist der historische Vorgänger der relativen Frische-Angabe max-age.

So funktioniert es

Der Server sendet ein Datum im HTTP-Datum-Format (immer in GMT). Der Cache vergleicht seine eigene Uhr mit diesem Zeitpunkt:

HTTP/1.1 200 OK
Content-Type: image/png
Expires: Wed, 30 Sep 2026 12:00:00 GMT

Bis zu diesem Zeitpunkt darf die Antwort aus dem Cache ausgeliefert werden, danach gilt sie als abgelaufen und wird revalidiert.

Warum max-age es ersetzt hat

  • Expires ist ein absoluter Zeitpunkt — die Uhren von Client, Cache und Server müssen synchron laufen; bei falscher Client-Uhr kommt es zu falschen Ergebnissen.
  • max-age ist relativ zur Antwort-Erzeugung und damit robuster. Nach RFC 9111 hat max-age Vorrang, wenn beide Header gesetzt sind.
  • Der Wert Expires: 0 (oder ein Datum in der Vergangenheit) bedeutet: Die Ressource ist sofort abgelaufen — ein Trick, um das Caching gezielt zu verhindern.
  • Heute dient Expires vor allem als Fallback für ältere Clients und Proxies, die Cache-Control nicht verstehen.

Gemeinsam mit Cache-Control und Stale-While-Revalidate bildet Expires die zeitliche Steuerung des HTTP-Caching.

Verwandte Grundlagen: Cache, HTTP, ETag.