Fix compressed resume proxy responses
This commit is contained in:
+18
-2
@@ -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) {
|
async function proxyResumeRequest(req: Request, rest: string, userId: string) {
|
||||||
const incoming = new URL(req.url);
|
const incoming = new URL(req.url);
|
||||||
const normalizedRest = rest
|
const normalizedRest = rest
|
||||||
@@ -419,6 +430,7 @@ async function proxyResumeRequest(req: Request, rest: string, userId: string) {
|
|||||||
headers.delete("cookie");
|
headers.delete("cookie");
|
||||||
headers.set("authorization", `Bearer ${config.a2aAllowedKey}`);
|
headers.set("authorization", `Bearer ${config.a2aAllowedKey}`);
|
||||||
headers.set("x-growqr-user", userId);
|
headers.set("x-growqr-user", userId);
|
||||||
|
headers.set("accept-encoding", "identity");
|
||||||
|
|
||||||
const method = req.method.toUpperCase();
|
const method = req.method.toUpperCase();
|
||||||
const body = ["GET", "HEAD"].includes(method) ? undefined : await req.arrayBuffer();
|
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") {
|
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();
|
const responseBuffer = await res.arrayBuffer();
|
||||||
@@ -461,7 +477,7 @@ async function proxyResumeRequest(req: Request, rest: string, userId: string) {
|
|||||||
return new Response(responseBuffer, {
|
return new Response(responseBuffer, {
|
||||||
status: res.status,
|
status: res.status,
|
||||||
statusText: res.statusText,
|
statusText: res.statusText,
|
||||||
headers: res.headers,
|
headers: decodedProxyHeaders(res.headers),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user