diff --git a/.changeset/alacroix.md b/.changeset/alacroix.md new file mode 100644 index 000000000..de41cf275 --- /dev/null +++ b/.changeset/alacroix.md @@ -0,0 +1,5 @@ +--- +"@opennextjs/aws": patch +--- + +Fix response binary content handling diff --git a/packages/open-next/src/core/routing/util.ts b/packages/open-next/src/core/routing/util.ts index c7b25dd44..b70048c13 100644 --- a/packages/open-next/src/core/routing/util.ts +++ b/packages/open-next/src/core/routing/util.ts @@ -76,11 +76,9 @@ export function convertRes(res: OpenNextNodeResponse): InternalResult { // When using HEAD requests, it seems that flushHeaders is not called, not sure why // Probably some kind of race condition const headers = parseHeaders(res.getFixedHeaders()); - const isBase64Encoded = isBinaryContentType( - Array.isArray(headers["content-type"]) - ? headers["content-type"][0] - : headers["content-type"], - ); + const isBase64Encoded = + isBinaryContentType(headers["content-type"]) || + !!headers["content-encoding"]; // We cannot convert the OpenNextNodeResponse to a ReadableStream directly // You can look in the `aws-lambda.ts` file for some context const body = Readable.toWeb(Readable.from(res.getBody())); diff --git a/packages/open-next/src/http/util.ts b/packages/open-next/src/http/util.ts index 0e3be5fdd..048ef982d 100644 --- a/packages/open-next/src/http/util.ts +++ b/packages/open-next/src/http/util.ts @@ -12,7 +12,7 @@ export const parseHeaders = ( if (value === undefined) { continue; } else { - result[key] = convertHeader(value); + result[key.toLowerCase()] = convertHeader(value); } }