Cache-Control für Nuxt 3 konfigurieren

Schritt-für-Schritt: Sicherheitsrelevante Cache-Direktiven in Nuxt 3 — für Assets, HTML-Seiten und sensible API-Routen.

Nuxt 3 · Schritt für Schritt

Cache-Control in Nuxt 3

Cache-Control steuert, wie Browser und CDNs Ressourcen zwischenspeichern. Falsche Einstellungen können sensible Daten in öffentlichen Caches speichern oder veraltete Sicherheitsheader ausliefern. Mit 8 von 166 Punkten ist Cache-Control ein relevanter Faktor im Wolf-Agents Web Security Check.

Nuxt 3 setzt automatisch optimale Cache-Header für /_nuxt/-Assets (immutable, 1 Jahr TTL). Für HTML-Seiten und API-Routen müssen Sie Cache-Control manuell konfigurieren — insbesondere für Dashboard-, Login- und Account-Seiten, die personenbezogene Daten enthalten. Ohne explizite Konfiguration können CDNs oder Shared Proxies diese Seiten zwischenspeichern.

Wichtig: Bei nuxt generate (SSG) verlieren Sie Server-Header. Cache-Control muss dann auf dem Hosting-Anbieter (Vercel, Netlify, Nginx) konfiguriert werden. Nur im SSR-Modus (nuxt build) können Sie Header per routeRules und Middleware setzen.

1 Schritt 1 von 4

Cache-Control per routeRules

Definieren Sie unterschiedliche Cache-Strategien für verschiedene Routen. Statische Assets können lang gecacht werden, HTML-Seiten sollten revalidiert werden, und sensible Bereiche (Dashboard, Login, Account) dürfen nicht gecacht werden. Die routeRules in nuxt.config.ts sind die empfohlene Methode.

nuxt.config.ts routeRules
// nuxt.config.ts — Cache-Control per routeRules
export default defineNuxtConfig({
  routeRules: {
    // Statische Assets: lang cachen (Nuxt Default)
    '/_nuxt/**': {
      headers: {
        'Cache-Control': 'public, max-age=31536000, immutable',
      },
    },
    // HTML-Seiten: kurz cachen, revalidieren
    '/**': {
      headers: {
        'Cache-Control': 'public, max-age=0, must-revalidate',
      },
    },
    // Sensible Seiten: nicht cachen
    '/dashboard/**': {
      headers: {
        'Cache-Control': 'private, no-cache, no-store, must-revalidate',
      },
    },
    // Login und Account: nicht cachen
    '/login': {
      headers: {
        'Cache-Control': 'private, no-cache, no-store, must-revalidate',
      },
    },
    '/account/**': {
      headers: {
        'Cache-Control': 'private, no-cache, no-store, must-revalidate',
      },
    },
  },
})
2 Schritt 2 von 4

Nitro Server Middleware für dynamische Logik

Für komplexere Logik — etwa Content-Hash-basiertes Caching oder Cookie-abhängige Entscheidungen — nutzen Sie eine Nitro Server Middleware. Die Middleware wird bei jedem Request ausgeführt und kann den Cache-Control-Header dynamisch setzen.

server/middleware/cache.ts Middleware
// server/middleware/cache.ts — dynamische Cache-Kontrolle
export default defineEventHandler((event) => {
  const path = event.path;

  // API-Routen: nie cachen
  if (path.startsWith('/api/')) {
    setHeader(event,
      'Cache-Control',
      'private, no-cache, no-store'
    );
    setHeader(event,
      'Pragma',
      'no-cache'
    );
    return;
  }

  // Statische Assets mit Hash: immutable
  if (path.match(/\.[a-f0-9]{8}\./)) {
    setHeader(event,
      'Cache-Control',
      'public, max-age=31536000, immutable'
    );
  }
})
private vs. no-store

private erlaubt Browser-Cache, verbietet CDN/Proxy-Cache. no-store verbietet jegliches Caching. Für maximale Sicherheit auf sensiblen Routen kombinieren Sie beide: private, no-cache, no-store, must-revalidate.

3 Schritt 3 von 4

nuxt-security Modul

Das nuxt-security Modul setzt keine Cache-Control-Defaults, kann aber mit routeRules kombiniert werden. Wenn Sie nuxt-security bereits für andere Security Header verwenden, definieren Sie Cache-Control weiterhin über routeRules — die beiden Ansätze ergänzen sich.

nuxt.config.ts nuxt-security
// nuxt.config.ts — nuxt-security Alternative
export default defineNuxtConfig({
  modules: ['nuxt-security'],

  security: {
    headers: {
      // nuxt-security setzt keine Cache-Control Defaults
      // Nutzen Sie routeRules für Cache-Control
    },
  },
})
4 Schritt 4 von 4

Cache-Header verifizieren

Prüfen Sie die Cache-Header für verschiedene Ressourcentypen. Erstellen Sie einen Production-Build mit npx nuxi build — der Dev-Server kann andere Header setzen als der Produktiv-Build. Der Wolf-Agents Web Security Check bewertet Cache-Control mit bis zu 8 Punkten.

Terminal Verifizieren
# Production-Build starten
npx nuxi build && node .output/server/index.mjs

# HTML-Seite
curl -sI https://ihre-domain.de | grep -i cache-control

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

# Statisches Asset
curl -sI https://ihre-domain.de/_nuxt/entry.abc123.js | grep -i cache-control

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

# Dashboard-Seite
curl -sI https://ihre-domain.de/dashboard | grep -i cache-control

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

Häufige Fehler

Sensible API-Daten im CDN-Cache

API-Routen ohne Cache-Control: private, no-store können in CDN-Caches landen. Ein anderer Nutzer hinter dem gleichen CDN sieht möglicherweise gecachte personenbezogene Daten. Setzen Sie private, no-store für alle authentifizierten Routen.

nuxt-security überschreibt routeRules

Wenn nuxt-security und routeRules denselben Header setzen, kann es zu Konflikten kommen. Konfigurieren Sie Cache-Control nur an einer Stelle — bevorzugt über routeRules, da diese routenspezifisch sind.

SSG-Build verliert Server-Header

nuxt generate erzeugt statische Dateien ohne Server. Cache-Control aus routeRules wird nicht angewandt. Konfigurieren Sie Cache-Control auf dem Hosting-Anbieter (Vercel, Netlify, Nginx).

Dev-Server hat andere Header

Der nuxi dev-Server setzt möglicherweise andere Cache-Header als der Production-Build. Testen Sie immer mit nuxi build und dem Production-Server. Nutzen Sie npx nuxi cleanup vor dem Build.

Compliance-Relevanz

PCI DSS fordert, dass sensible Daten nicht in öffentlichen Caches gespeichert werden — no-store auf Zahlungs- und Authentifizierungsseiten ist eine explizite Anforderung. DSGVO verlangt den Schutz personenbezogener Daten auch in Caches — gecachte Dashboard-Seiten verletzen die Datenschutzprinzipien. NIS2 fordert angemessene technische Maßnahmen zum Datenschutz. OWASP empfiehlt no-store für alle authentifizierten Responses. Der Wolf-Agents Web Security Check bewertet Cache-Control mit bis zu 8 Punkten.

Wie steht Ihre Domain bei Cache-Control?

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