Fix compressed resume proxy responses

This commit is contained in:
Sai-karthik
2026-07-13 06:52:59 +00:00
parent fdf4f6468d
commit e444d1be15
+18 -2
View File
@@ -396,6 +396,17 @@ function parseJsonBody(body: ArrayBuffer | undefined, headers: Headers): JsonObj
}
}
function decodedProxyHeaders(headers: Headers) {
const forwarded = new Headers(headers);
// Node fetch transparently decodes gzip/br bodies but retains the upstream
// encoding and byte-length headers. Forwarding those stale headers makes the
// next proxy/browser decode an already-decoded body and fail.
forwarded.delete("content-encoding");
forwarded.delete("content-length");
forwarded.delete("transfer-encoding");
return forwarded;
}
async function proxyResumeRequest(req: Request, rest: string, userId: string) {
const incoming = new URL(req.url);
const normalizedRest = rest
@@ -419,6 +430,7 @@ async function proxyResumeRequest(req: Request, rest: string, userId: string) {
headers.delete("cookie");
headers.set("authorization", `Bearer ${config.a2aAllowedKey}`);
headers.set("x-growqr-user", userId);
headers.set("accept-encoding", "identity");
const method = req.method.toUpperCase();
const body = ["GET", "HEAD"].includes(method) ? undefined : await req.arrayBuffer();
@@ -436,7 +448,11 @@ async function proxyResumeRequest(req: Request, rest: string, userId: string) {
});
if (method === "GET" || method === "HEAD") {
return new Response(res.body, { status: res.status, statusText: res.statusText, headers: res.headers });
return new Response(res.body, {
status: res.status,
statusText: res.statusText,
headers: decodedProxyHeaders(res.headers),
});
}
const responseBuffer = await res.arrayBuffer();
@@ -461,7 +477,7 @@ async function proxyResumeRequest(req: Request, rest: string, userId: string) {
return new Response(responseBuffer, {
status: res.status,
statusText: res.statusText,
headers: res.headers,
headers: decodedProxyHeaders(res.headers),
});
}