diff --git a/src/app/api/relay/route.ts b/src/app/api/relay/route.ts index 1dae00c..1cf4034 100644 --- a/src/app/api/relay/route.ts +++ b/src/app/api/relay/route.ts @@ -46,6 +46,9 @@ async function handler(req: Request): Promise { } const headers = filterHeaders(new Headers(req.headers)); + // Prevent compressed responses (gzip, br) that cause encoding bugs in relay + headers.delete("accept-encoding"); + const fetchOptions = buildRelayRequest(req, targetUrl, headers); const response = await fetch(targetUrl, fetchOptions); diff --git a/src/lib/relay-utils.ts b/src/lib/relay-utils.ts index 2c18e8a..6fbe16b 100644 --- a/src/lib/relay-utils.ts +++ b/src/lib/relay-utils.ts @@ -90,11 +90,14 @@ export function isAllowedTarget(url: string): boolean { export function createRelayResponse(response: Response): Response { const headers = new Headers(response.headers); + // Remove headers that would confuse the browser or were handled by the proxy headers.delete("content-encoding"); headers.delete("content-length"); headers.delete("transfer-encoding"); headers.delete("connection"); headers.delete("keep-alive"); + headers.delete("x-frame-options"); // Allow embedding if needed + headers.delete("content-security-policy"); // Add CORS for browser UI headers.set("Access-Control-Allow-Origin", "*");