PerformanceKategorie

Cache-Control-Header verstehen: Clientseitiges Caching per HTTP optimieren

11 min lesen
GoDaddy Deutschland Content Team
Titelmotiv: Cache-Control-Header verstehen: Clientseitiges Caching per HTTP optimieren

Wichtige Erkenntnisse

  • Cache-Control steuert Performance und Aktualität zugleich
  • max-age ist deine wichtigste Performance-Stellschraube
  • no-cache ist nicht no-store
  • Ganzheitlich denken: Browser, Proxy und CDN

Webnutzer sind ungeduldig – beim Seitenaufbau zählt jede Millisekunde. Wenn deine Website langsam lädt, springen Besucher schneller ab, als dir lieb ist. In diesem Artikel zeigen wir dir, wie du mit dem Cache-Control-Header das clientseitige Caching per HTTP gezielt steuerst und so Performance, Serverlast und Nutzererlebnis optimierst.

Damit das funktioniert, musst du verstehen, wie Browser Inhalte zwischenspeichern und wann sie auf bereits gespeicherte Versionen zurückgreifen dürfen. Genau hier kommt der Cache-Control-Header ins Spiel: Er gibt dem Client klare Regeln vor, wie lange Ressourcen als gültig gelten und unter welchen Bedingungen sie neu vom Server angefordert werden müssen.

Was ist ein Cache-Control-Header – und welchen Vorteil hast du davon?

Der Cache-Control-Header ist ein Bestandteil des HTTP-Response-Headers. Mit ihm legst du fest, wie Browser und Proxy-Server mit deinen Ressourcen umgehen sollen – also ob sie Inhalte speichern dürfen, wie lange diese als gültig gelten und wann sie beim Server nachfragen müssen.

Konkret bedeutet das für dich: Du bestimmst aktiv, wie der Cache arbeitet. Statt dem Browser das Verhalten zu überlassen, steuerst du über „cache-control“-Direktiven wie max-age, no-cache oder no-store, ob Inhalte sofort wiederverwendet oder erneut geladen werden.

Der große Vorteil: Wenn du den Cache-Control-Header richtig setzt, reduzierst du unnötige Requests, beschleunigst den Seitenaufbau und senkst die Serverlast. Gleichzeitig verhinderst du, dass Besucher veraltete oder fehlerhafte Inhalte sehen. Du verbindest also Performance und Aktualität – und genau das ist entscheidend für SEO und Conversion.

Browser-Cache: So profitierst du von schnellerem Seitenaufbau

Jeder moderne Browser verfügt über einen lokalen Cache. Sobald ein Nutzer deine Website aufruft, speichert der Browser bestimmte Ressourcen – etwa Bilder, CSS-Dateien oder JavaScript – automatisch zwischen.

Wird dieselbe Ressource erneut benötigt, prüft der Browser zuerst, ob bereits eine gecachte Version vorhanden ist. Ist das der Fall und sie gilt noch als „frisch“, wird sie direkt aus dem lokalen Speicher geladen – ohne erneuten Server-Request.

Für dich bedeutet das:

  • Schnellere Ladezeiten
  • Weniger Datenübertragung
  • Geringere Serverlast
  • Bessere Core Web Vitals

Gerade bei Websites mit vielen einzelnen Dateien (CSS, JS, Fonts, Bilder) summieren sich diese Einsparungen enorm. Ohne durchdachte Cache-Control-Regeln würde jede Ressource bei jedem Seitenaufruf neu angefordert – ein unnötiger Performance-Killer.

Allerdings: Der Browser entscheidet nicht völlig frei. Ob eine Ressource verwendet werden darf oder nicht, hängt davon ab, welche Vorgaben du im Cache-Control-Header definiert hast. Genau hier beginnt die eigentliche Steuerung.

Performance optimieren? Lass die KI das für dich machen!

Darf eine Ressource gecacht werden? So übernimmst du die Kontrolle

Standardmäßig dürfen Browser bestimmte Server-Antworten zwischenspeichern – vor allem erfolgreiche GET-Requests mit Statuscodes wie 200 oder 301. Ohne zusätzliche Vorgaben entscheidet der Browser also selbst, ob Inhalte gespeichert werden.

Wenn du jedoch volle Kontrolle über den Cache willst, steuerst du das über den Cache-Control-Header.

Mit folgenden Direktiven greifst du aktiv ein:

Cache-Control: no-cache
Die Ressource darf gespeichert werden, aber der Browser muss vor jeder erneuten Nutzung beim Server nachfragen, ob sie noch aktuell ist. „Cache no-cache“ bedeutet also nicht „kein Cache“, sondern „nicht ohne Prüfung verwenden“.

Cache-Control: no-store
Die Ressource darf überhaupt nicht gespeichert werden – weder im Browser noch in Proxy-Caches. Das ist sinnvoll bei sensiblen oder personalisierten Inhalten.

Cache-Control: public
Die Ressource darf von allen Caches gespeichert werden – also auch von Proxy-Servern oder CDNs.

Cache-Control: private
Nur der Browser des jeweiligen Nutzers darf die Ressource speichern, nicht jedoch Proxy-Caches.

must-revalidate

Nach Ablauf der Gültigkeit muss zwingend eine Server-Anfrage erfolgen – selbst wenn der Client offline ist.

Cache-Control: max-age=SECONDS

Legt fest, wie lange eine Ressource als frisch gilt.
„cache control max age“ ist die wichtigste Performance-Direktive für statische Inhalte.

s-maxage

Wie max-age, gilt jedoch ausschließlich für Proxy-Caches.

Du siehst: Mit wenigen Header-Angaben bestimmst du präzise, wie Browser und Zwischenstationen mit deinen Inhalten umgehen dürfen. So verhinderst du ungewolltes Caching – oder nutzt es gezielt für maximale Performance. In den nächsten Beispielen gehen wir näher darauf ein.

Cache-Control max-age: So bestimmst du die Lebensdauer deiner Inhalte

Ob eine Ressource genutzt werden darf, ist nur die halbe Miete. Entscheidend ist auch, wie lange sie als gültig gilt. Genau hier kommt Cache-Control: max-age, ins Spiel.

Mit cache control max age legst du fest, wie viele Sekunden eine Ressource als „frisch“ betrachtet wird. Innerhalb dieses Zeitraums darf der Browser die Datei direkt aus dem Cache laden – ohne erneuten Kontakt zum Server.

Beispiel:

Cache-Control: max-age=600

Das bedeutet: Die Ressource ist 600 Sekunden (also 10 Minuten) gültig.

Für dich hat das enorme Vorteile:

  • Wiederkehrende Besucher laden deine Seite deutlich schneller
  • Dein Server verarbeitet weniger Requests
  • Bandbreite wird eingespart
  • Deine Performance-Werte verbessern sich messbar

Wichtig ist dabei die richtige Strategie:

  • Statische Dateien wie Bilder, CSS oder JavaScript können oft sehr lange gültig bleiben (z. B. mehrere Tage oder Wochen).
  • Dynamische Inhalte wie HTML-Seiten sollten kürzere Laufzeiten haben oder zusätzlich revalidiert werden.

Falls du zusätzlich den Expires-Header setzt: max-age hat Priorität und wird von modernen Browsern bevorzugt ausgewertet.

Doch was passiert, wenn die Zeit abgelaufen ist? Muss dann immer neu heruntergeladen werden – selbst wenn sich gar nichts geändert hat?

Genau hier kommt die Revalidierung ins Spiel.

WordPress schnell gemacht – mit Caching, das von alleine läuft

Revalidierung: So vermeidest du unnötige Downloads

Wenn die mit max-age definierte Gültigkeitsdauer abgelaufen ist, heißt das nicht automatisch, dass die Ressource komplett neu heruntergeladen werden muss. Stattdessen kann der Browser prüfen lassen, ob sich die Datei überhaupt geändert hat. Genau das nennt man Revalidierung.

Dabei sendet der Browser eine sogenannte „Conditional Request“ an den Server. Er übermittelt dabei einen sogenannten Validator – entweder:

  • einen ETag (Entity Tag) oder
  • einen Zeitstempel über Last-Modified.

Beispiel einer Server-Antwort mit Validator:

HTTP/1.1 200 OK
Cache-Control: max-age=600
ETag: "x26e3"
Last-Modified: Mon, 18 May 2020 10:01:22 GMT

Ist die Ressource nach Ablauf der 600 Sekunden möglicherweise veraltet, fragt der Browser beim Server nach:
„Hat sich diese Datei mit dem ETag x26e3 geändert?“

Wenn keine Änderung vorliegt, antwortet der Server mit:

304 Not Modified

In diesem Fall wird keine Datei neu übertragen – die bereits gecachte Version bleibt gültig. Das spart Bandbreite und beschleunigt die Ladezeit erheblich.

Du kannst Revalidierung auch erzwingen, etwa mit:

  • Cache-Control: no-cache
  • must-revalidate
  • proxy-revalidate

Besonders bei sensiblen oder geschäftskritischen Anwendungen sorgt das dafür, dass niemals abgelaufene Inhalte ausgeliefert werden.

Revalidierung ist damit der ideale Mittelweg:
Du nutzt die Vorteile des Cachings, ohne das Risiko veralteter Inhalte einzugehen.

Cache-Control-Header richtig setzen: So konfigurierst du Apache & Nginx

Theorie ist gut – aber erst mit der richtigen Server-Konfiguration entfaltet der Cache-Control-Header seine volle Wirkung. Entscheidend ist, dass du deine HTTP-Headers bewusst setzt und nicht dem Zufall überlässt.

Hier siehst du typische Beispiele für Apache und Nginx.

Cache-Control-Header in Apache (.htaccess)

Für Apache kannst du den Cache-Control-Header in der .htaccess-Datei definieren:

Statische Dateien (Bilder, CSS, JS) lange cachen:

<FilesMatch "\.(jpg|jpeg|png|gif|css|js)$">
  Header set Cache-Control "public, max-age=31536000"
</FilesMatch>

→ Die Dateien dürfen ein Jahr gespeichert werden (31.536.000 Sekunden).

HTML-Dateien kürzer cachen:

<FilesMatch "\.(html)$">
  Header set Cache-Control "no-cache, must-revalidate"
</FilesMatch>

→ Speicherung erlaubt, aber Nutzung nur nach Revalidierung.

Wichtig: Damit das funktioniert, muss das Apache-Modul mod_headers aktiviert sein.

Cache-Control in Nginx konfigurieren

In Nginx erfolgt das Setzen der headers cache-control meist im Server-Block:

Statische Assets lange cachen:

location ~* \.(jpg|jpeg|png|gif|css|js)$ {
    expires 365d;
    add_header Cache-Control "public";
}

HTML-Dateien mit Revalidierung:

location ~* \.(html)$ {
    add_header Cache-Control "no-cache, must-revalidate";
}

Best Practice: Versionierung nicht vergessen

Wenn du Dateien lange cachen lässt (z. B. mit hohem cache control max age), solltest du statische Assets versionieren.

Beispiel:

style.css?v=2.1

oder

style.abc123.css

So stellst du sicher, dass bei Änderungen automatisch eine neue Datei geladen wird – obwohl die alte sehr lange gültig war.

Richtig konfiguriert sorgt dein Cache-Control-Header also dafür, dass:

  • Statische Inhalte maximale Performance liefern
  • Dynamische Inhalte aktuell bleiben
  • Dein Server entlastet wird
  • Deine SEO-Werte profitieren

Caching durch Proxys und CDNs: Warum dein Cache-Control-Header noch weiter wirkt

Wenn du den Cache-Control-Header setzt, steuerst du nicht nur den Browser-Cache deiner Besucher. Zwischen Browser und deinem Server können weitere Instanzen sitzen, die Inhalte zwischenspeichern – zum Beispiel Proxy-Server beim Internet-Provider oder ein CDN (Content Delivery Network).

Das bedeutet: Dein Caching-Control wirkt auf mehreren Ebenen.

Sobald eine Anfrage gestellt wird, durchläuft sie diese Stationen. Kann eine dieser Instanzen die Ressource bereits aus ihrem Cache bedienen, wird sie direkt ausgeliefert – dein Ursprungsserver bleibt entlastet. Im Idealfall verkürzt das die Ladezeit zusätzlich, weil Inhalte geografisch näher am Nutzer liegen.

Hier kommen zwei wichtige Direktiven ins Spiel:

Cache-Control: s-maxage=SECONDS

Funktioniert wie max-age, gilt aber ausschließlich für Proxy-Caches. Du kannst damit also eine andere Lebensdauer für CDNs definieren als für Browser.

Cache-Control: private

Verhindert, dass gemeinsame Proxy-Caches personalisierte Inhalte speichern. Nur der Browser des jeweiligen Nutzers darf sie zwischenspeichern.

Ein Beispiel für eine kombinierte Strategie:

Cache-Control: public, max-age=600, s-maxage=3600

Das bedeutet:
Browser dürfen die Ressource 10 Minuten speichern, Proxy-Server hingegen 60 Minuten.

Wichtig zu wissen:
Proxys dürfen aus Sicherheitsgründen keine Antworten mit Autorisierungs-Headern ausliefern, außer du erlaubst es ausdrücklich mit entsprechenden Direktiven wie public oder s-maxage.

Wenn du also ein CDN nutzt, solltest du deine Cache-Control-Strategie immer ganzheitlich betrachten. Browser-Caching allein reicht nicht aus – erst die Abstimmung zwischen Client, Proxy und Server bringt maximale Performance.

Damit Cache-Control nicht zum Sicherheitsrisiko wird

Typische Fehler beim Cache-Control – und wie du sie vermeidest

Auch wenn der Cache-Control-Header technisch simpel wirkt, passieren in der Praxis häufig Fehler. Diese können Performance kosten oder sogar falsche Inhalte ausliefern.

Hier sind die häufigsten Stolperfallen:

1. „no-cache“ mit „kein Cache“ verwechseln

Viele gehen davon aus, dass Cache-Control: no-cache bedeutet, dass nichts gespeichert wird. Das ist falsch.

„Cache no-cache“ erlaubt die Speicherung, verlangt aber eine Revalidierung vor jeder Nutzung. Wenn du wirklich verhindern willst, dass eine Ressource gespeichert wird, musst du no-store verwenden.

2. Zu kurzer oder zu langer max-age-Wert

Ein zu niedriger cache control max age sorgt dafür, dass Ressourcen ständig neu angefragt werden – unnötige Serverlast.

Ein zu hoher Wert bei dynamischen Inhalten kann hingegen veraltete Inhalte ausliefern.

Faustregel:

  • Statische Assets → lange Lebensdauer
  • HTML & dynamische Inhalte → kürzer oder mit Revalidierung

3. Keine Versionierung bei langen Laufzeiten

Wenn du CSS- oder JS-Dateien ein Jahr cachen lässt, aber keine Versionsnummer verwendest, sehen Nutzer nach Updates möglicherweise alte Designs oder fehlerhafte Skripte.

Lange Cache-Laufzeit funktioniert nur mit sauberer Asset-Versionierung.

4. „private“ oder „public“ falsch eingesetzt

Wird public bei personalisierten Inhalten verwendet, können Proxy-Caches Inhalte unter Umständen mehreren Nutzern anzeigen.

Wir privat bei statischen Assets genutzt, verschenkst du CDN-Potenzial.

5. Cache-Control und CDN nicht aufeinander abgestimmt

Wenn du ein CDN nutzt, aber kein s-maxage definierst, kann es passieren, dass Browser- und Proxy-Caches identische Laufzeiten haben – obwohl unterschiedliche Strategien sinnvoll wären.

Eine saubere Caching-Control-Strategie berücksichtigt immer beide Ebenen.

Wenn du diese Fehler vermeidest, holst du das Maximum aus deinem Cache-Control-Header heraus – ohne Risiko für Aktualität oder Sicherheit.

Fazit: Mit der richtigen Cache-Control-Strategie zu mehr Performance und Kontrolle

Der Cache-Control-Header ist eines der wirkungsvollsten Werkzeuge, um die Performance deiner Website gezielt zu optimieren. Mit klar definierten Direktiven bestimmst du, ob Inhalte gespeichert werden dürfen, wie lange sie gültig bleiben und wann eine Revalidierung erfolgen muss.

Wenn du Cache-Control strategisch einsetzt, erreichst du mehrere Ziele gleichzeitig:

  • Schnellere Ladezeiten durch weniger Server-Requests
  • Entlastung deiner Infrastruktur
  • Bessere Core Web Vitals und SEO-Signale
  • Vermeidung veralteter oder falscher Inhalte

Entscheidend ist dabei die Balance:
Statische Ressourcen dürfen lange gecacht werden – idealerweise mit hohem max-age und sauberer Versionierung. Dynamische oder sensible Inhalte hingegen benötigen kürzere Laufzeiten oder klare Revalidierungsregeln wie no-cache oder must-revalidate.

Denke außerdem ganzheitlich: Dein Caching-Control wirkt nicht nur im Browser, sondern auch in Proxy-Servern und CDNs. Erst wenn alle Ebenen aufeinander abgestimmt sind, entfaltet dein Cache-Control-Header sein volles Potenzial.

Richtig konfiguriert wird Caching so vom technischen Detail zur strategischen Performance-Stellschraube.

Produktempfehlungen: