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.