From cf249c013f0b19bf178aa163d7ef31b8e65ed290 Mon Sep 17 00:00:00 2001 From: Aurele Oules Date: Sat, 18 Jan 2025 12:40:11 +0100 Subject: [PATCH 1/5] Do not replace headers on fetch requests with error state --- packages/kit/src/runtime/server/respond.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index ab51505a897c..fde864d73829 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -508,10 +508,9 @@ export async function respond(request, options, manifest, state) { } if (state.error && event.isSubRequest) { + request.headers.append('x-sveltekit-error', 'true'); return await fetch(request, { - headers: { - 'x-sveltekit-error': 'true' - } + headers: request.headers }); } From 9802a74dc38fe07bf1cebc4d53f4cf52d5d8d3e2 Mon Sep 17 00:00:00 2001 From: Chew Tee Ming Date: Mon, 20 Jan 2025 17:41:48 +0800 Subject: [PATCH 2/5] avoid modifying original request --- packages/kit/src/runtime/server/respond.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index fde864d73829..5fcb02b3367b 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -508,10 +508,9 @@ export async function respond(request, options, manifest, state) { } if (state.error && event.isSubRequest) { - request.headers.append('x-sveltekit-error', 'true'); - return await fetch(request, { - headers: request.headers - }); + const headers = new Headers(request.headers); + headers.set('x-sveltekit-error', 'true'); + return await fetch(request, { headers }); } if (state.error) { From e7d6bc668e4c9712dfd18693988241d1df044100 Mon Sep 17 00:00:00 2001 From: Chew Tee Ming Date: Mon, 20 Jan 2025 17:44:53 +0800 Subject: [PATCH 3/5] changeset --- .changeset/bright-scissors-grow.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/bright-scissors-grow.md diff --git a/.changeset/bright-scissors-grow.md b/.changeset/bright-scissors-grow.md new file mode 100644 index 000000000000..f2cd51db71ae --- /dev/null +++ b/.changeset/bright-scissors-grow.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: avoid overwriting headers for sub-requests made while loading the error page From c2160067663f63d72eec15834067c423c9d5ee8e Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Tue, 21 Jan 2025 10:23:19 +0100 Subject: [PATCH 4/5] Update packages/kit/src/runtime/server/respond.js Co-authored-by: Tee Ming --- packages/kit/src/runtime/server/respond.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index 5fcb02b3367b..14596410f02b 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -508,6 +508,8 @@ export async function respond(request, options, manifest, state) { } if (state.error && event.isSubRequest) { + // avoid overwriting the headers. This could be a same origin fetch request + // to an external service from the root layout while rendering an error page const headers = new Headers(request.headers); headers.set('x-sveltekit-error', 'true'); return await fetch(request, { headers }); From 85bef81b8ac1127b283b0214e1a5a825ca029aa3 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Tue, 21 Jan 2025 10:23:51 +0100 Subject: [PATCH 5/5] Update packages/kit/src/runtime/server/respond.js --- packages/kit/src/runtime/server/respond.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index 14596410f02b..5f5ae7b795e4 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -508,8 +508,8 @@ export async function respond(request, options, manifest, state) { } if (state.error && event.isSubRequest) { - // avoid overwriting the headers. This could be a same origin fetch request - // to an external service from the root layout while rendering an error page + // avoid overwriting the headers. This could be a same origin fetch request + // to an external service from the root layout while rendering an error page const headers = new Headers(request.headers); headers.set('x-sveltekit-error', 'true'); return await fetch(request, { headers });