Cache-Control für Netlify konfigurieren

Schritt-für-Schritt-Anleitung: Sicherheitsrelevante Cache-Direktiven auf Netlify — HTML frisch halten, Assets langzeit-cachen, sensible Daten schützen.

Netlify · Schritt für Schritt

Cache-Control auf Netlify

Cache-Control steuert, wie Browser und CDNs Responses zwischenspeichern. Falsche Cache-Konfiguration kann dazu führen, dass sensible Daten in gemeinsam genutzten Caches landen oder veraltete Sicherheitsupdates nicht ankommen. Cache-Control ist mit 8 von 166 Punkten ein relevanter Faktor im Wolf-Agents Web Security Check.

Netlify setzt standardmäßig Cache-Control: public, max-age=0, must-revalidate für HTML-Seiten. Für statische Assets mit Hash im Dateinamen (z.B. main.a1b2c3.js) können Sie aggressive Langzeit-Caches mit immutable nutzen. Sensible Seiten (Login, Dashboard) müssen mit no-store geschützt werden.

Auf Netlify haben Sie drei Wege, Cache-Control zu konfigurieren: netlify.toml (versioniert im Repository), _headers-Datei (im Publish-Verzeichnis) oder Edge Functions (Deno-Runtime) für dynamische Entscheidungen. Die netlify.toml hat dabei Vorrang über _headers-Dateien.

1 Schritt 1 von 3

Cache-Strategie per netlify.toml definieren

Definieren Sie unterschiedliche Cache-Strategien für HTML, Assets und sensible Bereiche. Netlify erlaubt pfadbasierte Header-Regeln in der netlify.toml. Die Datei wird im Repository versioniert und bei jedem Deploy automatisch angewendet.

netlify.toml Empfohlen
# netlify.toml — Cache-Control Konfiguration
# HTML: Immer frisch vom Server
[[headers]]
  for = "/*.html"
  [headers.values]
    Cache-Control = "public, max-age=0, must-revalidate"

# Statische Assets: Langzeit-Cache mit immutable
[[headers]]
  for = "/assets/*"
  [headers.values]
    Cache-Control = "public, max-age=31536000, immutable"

# Sensible Seiten: Kein Cache
[[headers]]
  for = "/dashboard/*"
  [headers.values]
    Cache-Control = "private, no-store, no-cache, must-revalidate"

# API-Responses: Kein Cache
[[headers]]
  for = "/.netlify/functions/*"
  [headers.values]
    Cache-Control = "private, no-store"
_headers Alternative
# _headers — Cache-Control
/*.html
  Cache-Control: public, max-age=0, must-revalidate

/assets/*
  Cache-Control: public, max-age=31536000, immutable

/dashboard/*
  Cache-Control: private, no-store, no-cache, must-revalidate

# Netlify Functions
/.netlify/functions/*
  Cache-Control: private, no-store
netlify.toml hat Vorrang

Wenn sowohl netlify.toml als auch _headers den gleichen Header setzen, gewinnt netlify.toml. Entscheiden Sie sich für einen Weg pro Header, um Verwirrung zu vermeiden.

2 Schritt 2 von 3

Edge Function für dynamische Cache-Steuerung

Für komplexe Cache-Logik (z.B. authentifizierte vs. oeffentliche Bereiche) nutzen Sie Edge Functions. Diese laufen in der Deno-Runtime am Edge und können Header basierend auf Cookies, Pfaden oder Request-Eigenschaften dynamisch setzen.

netlify/edge-functions/cache-control.ts Deno
// netlify/edge-functions/cache-control.ts
import type { Context } from "https://edge.netlify.com";

export default async (request: Request, context: Context) => {
  const response = await context.next();
  const url = new URL(request.url);

  // Authentifizierte Bereiche: Kein Cache
  if (url.pathname.startsWith("/dashboard")) {
    response.headers.set(
      "Cache-Control",
      "private, no-store, no-cache, must-revalidate"
    );
    response.headers.set("Pragma", "no-cache");
  }

  return response;
};

export const config = { path: "/dashboard/*" };
Edge Functions überschreiben Header aus netlify.toml und _headers. Wenn Sie Cache-Control per Edge Function setzen, entfernen Sie den statischen Cache-Control für denselben Pfad, um Konflikte zu vermeiden.
3 Schritt 3 von 3

Cache-Header verifizieren

Prüfen Sie die Cache-Header für verschiedene Dateitypen nach dem Deploy. Achten Sie besonders darauf, dass sensible Seiten korrekt mit no-store konfiguriert sind. Testen Sie auch Deploy Previews, da diese unter einer separaten Domain (deploy-preview-*.netlify.app) laufen.

Terminal Verifizieren
# HTML-Cache prüfen
curl -sI https://ihre-domain.de/ | grep -i cache-control

# Erwartete Ausgabe:
# Cache-Control: public, max-age=0, must-revalidate

# Asset-Cache prüfen
curl -sI https://ihre-domain.de/assets/main.a1b2c3.js | grep -i cache-control

# Erwartete Ausgabe:
# Cache-Control: public, max-age=31536000, immutable

# Sensible Seite prüfen
curl -sI https://ihre-domain.de/dashboard/ | grep -i cache-control

# Erwartete Ausgabe:
# Cache-Control: private, no-store, no-cache, must-revalidate

# Netlify CDN-Cache prüfen (Age-Header)
curl -sI https://ihre-domain.de | grep -iE "x-nf-request-id|age|cache-control"

# Wolf-Agents Web Security Check nutzen:
# https://wolf-agents.com/tools/web-security-check

Häufige Fehler bei Cache-Control auf Netlify

Sensible Daten im CDN-Cache

Ohne private, no-store können authentifizierte Responses im Netlify CDN-Cache landen und an andere Benutzer ausgeliefert werden. Setzen Sie no-store für alle personalisierten Seiten wie Dashboard, Profil und Checkout.

immutable ohne Content-Hash

immutable sagt dem Browser, dass sich die Datei nie ändert. Verwenden Sie immutable nur für Assets mit Content-Hash im Dateinamen (z.B. main.a1b2c3.js). Ohne Hash erhalten Nutzer nach einem Update veraltete Dateien.

Netlify CDN überschreibt Header

Netlify setzt eigene Cache-Control Header für bestimmte Asset-Typen. Ihre Konfiguration in netlify.toml hat Vorrang über die Netlify-Defaults. Prüfen Sie nach dem Deploy, ob Ihre Header korrekt greifen.

Deploy Preview mit veraltetem Cache

Deploy Previews laufen unter deploy-preview-*.netlify.app. Browser-Cache von der Produktions-Domain beeinflusst Previews nicht, aber Service Worker können zu Verwirrung führen. Testen Sie Previews im Inkognito-Modus.

Compliance-Relevanz

Korrekte Cache-Konfiguration schützt sensible Daten vor unbeabsichtigtem Zugriff.

PCI DSS

Fordert, dass Kartendaten und personalisierte Zahlungsinformationen nicht in oeffentlichen Caches gespeichert werden. no-store auf Checkout-Seiten ist Pflicht.

DSGVO

Verlangt den Schutz personenbezogener Daten. no-store verhindert, dass Browser personalisierte Inhalte zwischenspeichern und auf gemeinsam genutzten Geräten verfügbar machen.

NIS2

Fordert technische Maßnahmen zur Cybersicherheit. Fehlerhafte Cache-Konfiguration kann zu Datenabfluss führen — ein Verstoß gegen die NIS2-Anforderungen.

Wolf-Agents Check

Bewertet Cache-Control mit bis zu 8 Punkten. Geprüft werden no-store für sensible Bereiche, korrekte max-age-Werte und die Abwesenheit von public auf authentifizierten Seiten.

Wie steht Ihre Domain bei Cache-Control?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.