diff --git a/.changeset/breezy-poets-grow.md b/.changeset/breezy-poets-grow.md new file mode 100644 index 000000000000..949ca16b2931 --- /dev/null +++ b/.changeset/breezy-poets-grow.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: prevent error attempting to modify immutable headers by creating a new `Response` object from the fetch response diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index 4ca265beab88..226d6e0175bd 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -607,7 +607,14 @@ export async function respond(request, options, manifest, state) { // we can't load the endpoint from our own manifest, // so we need to make an actual HTTP request - return await fetch(request); + const fetchResponse = await fetch(request); + + // the headers for the response needs to be mutable so that cookies can be added + return new Response(fetchResponse.body, { + status: fetchResponse.status, + statusText: fetchResponse.statusText, + headers: new Headers(fetchResponse.headers) + }); } catch (e) { // TODO if `e` is instead named `error`, some fucked up Vite transformation happens // and I don't even know how to describe it. need to investigate at some point