From 16b2698ed13b191b8dc0fe7a26fe97e30143a5af Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 19 Sep 2025 23:42:07 +0400 Subject: [PATCH 1/4] Set cache-control header for non-immutable assets When serving client files, ensure non-immutable assets are never cached by browsers by setting no-cache,no-store header --- packages/adapter-node/src/handler.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/adapter-node/src/handler.js b/packages/adapter-node/src/handler.js index b1a40bb19955..4af5d3ca0d34 100644 --- a/packages/adapter-node/src/handler.js +++ b/packages/adapter-node/src/handler.js @@ -52,11 +52,12 @@ function serve(path, client = false) { setHeaders: client ? (res, pathname) => { // only apply to build directory, not e.g. version.json - if ( - pathname.startsWith(`/${manifest.appPath}/immutable/`) && - res.statusCode === 200 - ) { - res.setHeader('cache-control', 'public,max-age=31536000,immutable'); + if (res.statusCode === 200) { + if (pathname.startsWith(`/${manifest.appPath}/immutable/`)) { + res.setHeader('cache-control', 'public,max-age=31536000,immutable'); + } else { + res.setHeader('cache-control', 'no-cache,no-store'); + } } } : undefined From 746227245959e2c6d371c2f5b2c521e2025e7a86 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 19 Sep 2025 23:50:06 +0400 Subject: [PATCH 2/4] Fix cache-control headers for app path files only --- packages/adapter-node/src/handler.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/adapter-node/src/handler.js b/packages/adapter-node/src/handler.js index 4af5d3ca0d34..4cfd3f356dd5 100644 --- a/packages/adapter-node/src/handler.js +++ b/packages/adapter-node/src/handler.js @@ -51,9 +51,9 @@ function serve(path, client = false) { brotli: true, setHeaders: client ? (res, pathname) => { - // only apply to build directory, not e.g. version.json - if (res.statusCode === 200) { + if (res.statusCode === 200 && pathname.startsWith(`/${manifest.appPath}/`)) { if (pathname.startsWith(`/${manifest.appPath}/immutable/`)) { + // only apply to build directory, not e.g. version.json res.setHeader('cache-control', 'public,max-age=31536000,immutable'); } else { res.setHeader('cache-control', 'no-cache,no-store'); From d82fcc60e865bf0ce67072f40ac94af1bb428780 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Sat, 20 Sep 2025 00:02:16 +0400 Subject: [PATCH 3/4] Set no-cache header for non-immutable assets in node adapter --- .changeset/tricky-pillows-remain.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tricky-pillows-remain.md diff --git a/.changeset/tricky-pillows-remain.md b/.changeset/tricky-pillows-remain.md new file mode 100644 index 000000000000..daf00ccf1e9a --- /dev/null +++ b/.changeset/tricky-pillows-remain.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': patch +--- + +fix: set no-cache cache-control header for non-immutable assets From 46c5757fc60ff0481439aa30f21f5d5bc50b3449 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Sat, 20 Sep 2025 00:07:27 +0400 Subject: [PATCH 4/4] Update non-static asset cache-control header Only static assets should be cached immutably. All other assets should revalidate to ensure freshness. --- packages/adapter-node/src/handler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-node/src/handler.js b/packages/adapter-node/src/handler.js index 4cfd3f356dd5..c3556e733794 100644 --- a/packages/adapter-node/src/handler.js +++ b/packages/adapter-node/src/handler.js @@ -56,7 +56,7 @@ function serve(path, client = false) { // only apply to build directory, not e.g. version.json res.setHeader('cache-control', 'public,max-age=31536000,immutable'); } else { - res.setHeader('cache-control', 'no-cache,no-store'); + res.setHeader('cache-control', 'public,max-age=0,must-revalidate'); } } }