From d8f3c22bbcf26a9a004c79a32bdfaf0695faee60 Mon Sep 17 00:00:00 2001 From: MarSeventh <1193267292@qq.com> Date: Wed, 29 Jul 2026 22:43:13 +0800 Subject: [PATCH] fix: filter upstream file request headers --- functions/file/fileTools.js | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/functions/file/fileTools.js b/functions/file/fileTools.js index 0bc60d39..fed8e5f1 100644 --- a/functions/file/fileTools.js +++ b/functions/file/fileTools.js @@ -97,14 +97,37 @@ export function handleHeadRequest(headers, etag = null) { }); } +const UPSTREAM_FILE_REQUEST_HEADERS = [ + 'Range', + 'If-Range', + 'If-Match', + 'If-None-Match', + 'If-Modified-Since', + 'If-Unmodified-Since', +]; + +function buildUpstreamFileRequestHeaders(requestHeaders) { + const headers = new Headers(); + + for (const headerName of UPSTREAM_FILE_REQUEST_HEADERS) { + const value = requestHeaders.get(headerName); + if (value !== null) { + headers.set(headerName, value); + } + } + + return headers; +} + export async function getFileContent(request, targetUrl, max_retries = 2) { + const method = request.method === 'HEAD' ? 'HEAD' : 'GET'; + const headers = buildUpstreamFileRequestHeaders(request.headers); let retries = 0; while (retries <= max_retries) { try { const response = await fetch(targetUrl, { - method: request.method, - headers: request.headers, - body: request.body, + method, + headers, }); if (response.ok || response.status === 304) { return response;