diff --git a/.changeset/red-kiwis-press.md b/.changeset/red-kiwis-press.md new file mode 100644 index 000000000..818875626 --- /dev/null +++ b/.changeset/red-kiwis-press.md @@ -0,0 +1,5 @@ +--- +"@opennextjs/aws": patch +--- + +Avoid creating unnecessary headers instance on every request diff --git a/packages/open-next/src/overrides/wrappers/cloudflare-node.ts b/packages/open-next/src/overrides/wrappers/cloudflare-node.ts index b3d8b374e..e33f5d8b4 100644 --- a/packages/open-next/src/overrides/wrappers/cloudflare-node.ts +++ b/packages/open-next/src/overrides/wrappers/cloudflare-node.ts @@ -41,15 +41,16 @@ const handler: WrapperHandler = }): Writable { const { statusCode, cookies, headers } = prelude; - const responseHeaders = new Headers(headers); - for (const cookie of cookies) { - responseHeaders.append("Set-Cookie", cookie); - } - // TODO(vicb): this is a workaround to make PPR work with `wrangler dev` // See https://github.com/cloudflare/workers-sdk/issues/8004 if (url.hostname === "localhost") { - responseHeaders.set("Content-Encoding", "identity"); + headers["content-encoding"] = "identity"; + } + + // Build headers array - set-cookie must be added separately for each cookie + const headerEntries: [string, string][] = Object.entries(headers); + for (const cookie of cookies) { + headerEntries.push(["set-cookie", cookie]); } const { readable, writable } = new TransformStream({ @@ -60,7 +61,7 @@ const handler: WrapperHandler = const body = NULL_BODY_STATUSES.has(statusCode) ? null : readable; const response = new Response(body, { status: statusCode, - headers: responseHeaders, + headers: headerEntries, }); resolveResponse(response);