Cache-Control für Astro konfigurieren
Schritt-für-Schritt-Anleitung: Sicherheitsrelevante Cache-Direktiven per Middleware -- private und no-store für authentifizierte Routen.
Cache-Control in Astro
Cache-Control steuert, ob und wie lange Ressourcen zwischengespeichert werden. Aus Sicherheitssicht ist entscheidend, dass authentifizierte Inhalte (Dashboard, API-Antworten) nicht gecacht werden. Cache-Control ist mit 8 von 166 Punkten im Wolf-Agents Web Security Check relevant.
In Astro setzen Sie Cache-Control per Middleware (SSR) differenziert für authentifizierte und öffentliche Routen. Statische Assets unter /_astro/ haben Content-Hashes im Dateinamen und können mit immutable dauerhaft gecacht werden. Wolf-Agents nutzt dieses Muster produktiv mit einer Drei-Stufen-Cache-Strategie.
Eine falsche Cache-Konfiguration kann dazu führen, dass ein CDN oder Browser-Cache authentifizierte Dashboard-Seiten speichert und an andere Benutzer ausliefert -- ein schwerwiegendes Datenschutzproblem, das durch korrekte Cache-Direktiven verhindert wird.
Cache-Control per Middleware (SSR)
Setzen Sie no-store, private für authentifizierte Routen und public, max-age=300 für öffentliche Seiten. Die Middleware unterscheidet anhand des URL-Pfads und setzt die Direktiven konsistent für jeden Request.
// src/middleware.ts -- Cache-Control (SSR)
import { defineMiddleware } from 'astro:middleware';
export const onRequest = defineMiddleware(async (context, next) => {
const response = await next();
const url = new URL(context.request.url);
// Authentifizierte Routen: nicht cachen
if (url.pathname.startsWith('/dashboard') || url.pathname.startsWith('/api')) {
response.headers.set('Cache-Control',
'no-store, no-cache, must-revalidate, private');
} else {
// Öffentliche Seiten: kurz cachen mit Revalidierung
response.headers.set('Cache-Control',
'public, max-age=300, stale-while-revalidate=60');
}
return response;
});Nginx Asset-Caching und Hosting-Varianten
Konfigurieren Sie auf Nginx langfristiges Caching für statische Assets. Astros Build-Pipeline versieht Assets mit Content-Hashes -- sie können mit immutable dauerhaft gecacht werden. Für Vercel setzen Sie Cache-Regeln in vercel.json.
# Nginx -- Cache-Control für statische Assets
# Astro-Assets haben Content-Hashes: main.abc123.js
location /_astro/ {
add_header Cache-Control "public, max-age=31536000, immutable" always;
}
# Öffentliche HTML-Seiten: kurz cachen
location / {
add_header Cache-Control "public, max-age=300, stale-while-revalidate=60" always;
}
# Fonts und Bilder: langfristig cachen
location ~* \.(woff2|ttf|eot|ico|png|jpg|webp|avif)$ {
add_header Cache-Control "public, max-age=2592000, immutable" always;
}// vercel.json -- Cache-Control für Astro auf Vercel
{
"headers": [
{
"source": "/_astro/(.*)",
"headers": [{
"key": "Cache-Control",
"value": "public, max-age=31536000, immutable"
}]
},
{
"source": "/dashboard/(.*)",
"headers": [{
"key": "Cache-Control",
"value": "no-store, private"
}]
}
]
}API-Routen absichern
Setzen Sie no-store, private explizit in API-Routen, die sensible Daten zurückgeben. Verwenden Sie Vary: Cookie, um sicherzustellen, dass Caches verschiedene Benutzer unterscheiden.
// src/pages/api/user/profile.ts -- API-Response ohne Cache
import type { APIRoute } from 'astro';
export const GET: APIRoute = async ({ locals }) => {
const user = locals.user;
return new Response(JSON.stringify(user), {
headers: {
'Content-Type': 'application/json',
// Sensible Daten niemals cachen
'Cache-Control': 'no-store, private',
'Vary': 'Cookie',
},
});
};Cache-Verhalten prüfen
Verifizieren Sie Cache-Control-Header für authentifizierte und öffentliche Routen. Prüfen Sie auch, ob das CDN die Header korrekt weiterleitet.
# Öffentliche Seite
curl -sI https://ihre-domain.de/ | grep -i cache-control
# Cache-Control: public, max-age=300, stale-while-revalidate=60
# Authentifizierte Route
curl -sI https://ihre-domain.de/dashboard -H "Cookie: session=..." | grep -i cache-control
# Cache-Control: no-store, no-cache, must-revalidate, private
# Statische Assets
curl -sI https://ihre-domain.de/_astro/main.abc123.js | grep -i cache-control
# Cache-Control: public, max-age=31536000, immutable Drei-Stufen-Cache-Strategie für Astro
Stufe 1 -- Statische Assets (immutable): Astro-Assets unter /_astro/ haben Content-Hashes im Dateinamen. Diese ändern sich bei jedem Build und können mit public, max-age=31536000, immutable dauerhaft gecacht werden. Der Browser lädt sie nur einmal herunter.
Stufe 2 -- Öffentliche Seiten (kurz cachen): HTML-Seiten, die sich ändern können, werden mit public, max-age=300, stale-while-revalidate=60 für 5 Minuten gecacht. stale-while-revalidate liefert die gecachte Version aus, während im Hintergrund eine frische Version geladen wird.
Stufe 3 -- Authentifizierte Routen (kein Cache): Dashboard-Seiten und API-Responses werden mit no-store, no-cache, must-revalidate, private vollständig vom Caching ausgeschlossen. private verhindert, dass CDNs die Antwort speichern. Wolf-Agents nutzt diese Drei-Stufen-Strategie produktiv.
Häufige Fehler bei Cache-Control in Astro
Dashboard-Seiten gecacht
Ohne no-store kann ein CDN oder Browser authentifizierte Seiten cachen. Ein anderer Benutzer sieht dann fremde Dashboard-Daten. Setzen Sie immer private, no-store für authentifizierte Routen.
immutable ohne Content-Hash
immutable nur für Dateien mit Content-Hash im Namen verwenden (z.B. main.abc123.js). Ohne Hash kann ein Browser veraltete Dateien dauerhaft cachen und Benutzer erhalten nie Updates.
CDN überschreibt Header
Einige CDNs (Cloudflare, Bunny) überschreiben oder ignorieren Cache-Control-Header. Prüfen Sie die CDN-Konfiguration und setzen Sie CDN-spezifische Cache-Regeln. Wolf-Agents konfiguriert Bunny.net explizit, um no-store für /dashboard zu respektieren.
prerender-Seiten ohne Cache-Header
Prerenderte Seiten mit export const prerender = true erhalten keine Middleware-Header. Setzen Sie Cache-Control auf dem Webserver für alle prerenderten HTML-Dateien.
Compliance-Relevanz
Korrekte Cache-Direktiven verhindern, dass personenbezogene Daten in Caches gespeichert werden -- eine Anforderung von DSGVO und NIS2. PCI DSS 4.0 verbietet das Caching von Zahlungsdaten in Shared Caches. Der Wolf-Agents Web Security Check bewertet Cache-Control mit bis zu 8 Punkten und prüft gezielt, ob authentifizierte Routen korrekt mit no-store geschützt sind.
Wie steht Ihre Domain bei Cache-Control?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.