From 1ff648762907d0e5a69145762df2dbbcd37f7817 Mon Sep 17 00:00:00 2001 From: kuekhaoyang Date: Fri, 28 Nov 2025 16:28:24 +0800 Subject: [PATCH] fix: Filter problematic headers like `content-encoding` and `content-length` when proxying non-m3u8 content while ensuring CORS headers are applied. --- app/api/proxy/route.ts | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/app/api/proxy/route.ts b/app/api/proxy/route.ts index d6b1ac8..0662a6d 100644 --- a/app/api/proxy/route.ts +++ b/app/api/proxy/route.ts @@ -99,18 +99,30 @@ export async function GET(request: NextRequest) { } // For non-m3u8 content (segments, mp4, etc.), stream directly - const newResponse = new NextResponse(response.body, { - status: response.status, - statusText: response.statusText, - headers: new Headers(response.headers), + const headers = new Headers(); + + // Copy headers but exclude problematic ones + response.headers.forEach((value, key) => { + const lowerKey = key.toLowerCase(); + if ( + lowerKey !== 'content-encoding' && + lowerKey !== 'content-length' && + lowerKey !== 'transfer-encoding' + ) { + headers.set(key, value); + } }); // Add CORS headers to allow playback - newResponse.headers.set('Access-Control-Allow-Origin', '*'); - newResponse.headers.set('Access-Control-Allow-Methods', 'GET, OPTIONS'); - newResponse.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization'); + headers.set('Access-Control-Allow-Origin', '*'); + headers.set('Access-Control-Allow-Methods', 'GET, OPTIONS'); + headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization'); - return newResponse; + return new NextResponse(response.body, { + status: response.status, + statusText: response.statusText, + headers: headers, + }); } catch (error) { console.error('Proxy error:', error); return new NextResponse(