From 9dc1841f0d5538f3acfbadc9d57ac2ac83b676bd Mon Sep 17 00:00:00 2001 From: Nazar Leush Date: Tue, 7 Jul 2026 16:10:26 +0300 Subject: [PATCH 1/5] forward headers from `app.http_forward_headers_values` --- lib/utils.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/utils.js b/lib/utils.js index 361a7aa78..42e510cb3 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -116,6 +116,14 @@ export function prepareRequestOptions(request_options, options) { } request_options.headers = request_options.headers || {}; + + // Put forward headers. + const forward_headers = options?.getProviderOptions && options.getProviderOptions('app.http_forward_headers_values'); + if (forward_headers && typeof forward_headers === 'object' && !Array.isArray(forward_headers)) { + for (const [key, value] of Object.entries(forward_headers)) { + request_options.headers[key] = value; + } + } if (CONFIG.PROXY || options?.proxy) { From 439591d66021b846f0227fd7ecdfcf6356e183f8 Mon Sep 17 00:00:00 2001 From: Nazar Leush Date: Thu, 9 Jul 2026 20:59:20 +0300 Subject: [PATCH 2/5] `http_forward_headers_values` -> `http_forward_headers` --- lib/utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils.js b/lib/utils.js index 42e510cb3..c1746321f 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -118,7 +118,7 @@ export function prepareRequestOptions(request_options, options) { request_options.headers = request_options.headers || {}; // Put forward headers. - const forward_headers = options?.getProviderOptions && options.getProviderOptions('app.http_forward_headers_values'); + const forward_headers = options?.getProviderOptions && options.getProviderOptions('app.http_forward_headers'); if (forward_headers && typeof forward_headers === 'object' && !Array.isArray(forward_headers)) { for (const [key, value] of Object.entries(forward_headers)) { request_options.headers[key] = value; From f5c95c5dea832cf66b5c0673da408c4d2d916607 Mon Sep 17 00:00:00 2001 From: Nazar Leush Date: Thu, 9 Jul 2026 23:08:22 +0300 Subject: [PATCH 3/5] do not send sig headers if `app.http_forward_sig` --- lib/utils.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/utils.js b/lib/utils.js index c1746321f..1a7589643 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -117,6 +117,8 @@ export function prepareRequestOptions(request_options, options) { request_options.headers = request_options.headers || {}; + const forward_sig = options?.getProviderOptions && options.getProviderOptions('app.http_forward_sig'); + // Put forward headers. const forward_headers = options?.getProviderOptions && options.getProviderOptions('app.http_forward_headers'); if (forward_headers && typeof forward_headers === 'object' && !Array.isArray(forward_headers)) { @@ -203,7 +205,7 @@ export function prepareRequestOptions(request_options, options) { setCookieFromJar(uri, request_options.headers, options?.jar) - if ((options?.sig || request_sig) && options?.getSigHeaders) { + if (!forward_sig && (options?.sig || request_sig) && options?.getSigHeaders) { try { options.getSigHeaders(original_uri, function(error, headers) { if (error) { From 491f06115591d719067ba6397efad53787a38f45 Mon Sep 17 00:00:00 2001 From: Nazar Leush Date: Fri, 10 Jul 2026 21:57:15 +0300 Subject: [PATCH 4/5] ignore Z_BUF_ERROR errors --- lib/fetch.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/fetch.js b/lib/fetch.js index a429cfc6f..d17cce1cb 100644 --- a/lib/fetch.js +++ b/lib/fetch.js @@ -44,7 +44,8 @@ export function skipLoggingFetchError(error) { || error?.code === 'ERR_STREAM_PREMATURE_CLOSE' || error?.code === 'ERR_HTTP2_STREAM_ERROR' || error?.code === 'ERR_HTTP2_SESSION_ERROR' - || error?.code === 'Z_DATA_ERROR'; + || error?.code === 'Z_DATA_ERROR' + || error?.code === 'Z_BUF_ERROR'; } function doFetch(fetch_func, h1_fetch_func, options) { From a1fd3d8821eb70cc780bbf345350de70a41e0724 Mon Sep 17 00:00:00 2001 From: Nazar Leush Date: Wed, 15 Jul 2026 15:28:31 +0300 Subject: [PATCH 5/5] better `prevent_sig` logic --- lib/utils.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/utils.js b/lib/utils.js index 1a7589643..8a50350e4 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -115,10 +115,9 @@ export function prepareRequestOptions(request_options, options) { setPrerender(enable_domain_prerender); } + // Make empty headers by default for all cases. request_options.headers = request_options.headers || {}; - const forward_sig = options?.getProviderOptions && options.getProviderOptions('app.http_forward_sig'); - // Put forward headers. const forward_headers = options?.getProviderOptions && options.getProviderOptions('app.http_forward_headers'); if (forward_headers && typeof forward_headers === 'object' && !Array.isArray(forward_headers)) { @@ -145,7 +144,6 @@ export function prepareRequestOptions(request_options, options) { request_options.headers['User-Agent'] = proxy.user_agent; } if (proxy.headers) { - request_options.headers = request_options.headers || {}; Object.assign(request_options.headers, proxy.headers) } if (proxy.request_options) { @@ -192,7 +190,6 @@ export function prepareRequestOptions(request_options, options) { var lang = options?.getProviderOptions && options.getProviderOptions('locale') || ''; if (!disable_language) { - request_options.headers = request_options.headers || {}; request_options.headers['Accept-Language'] = lang /* !== '' */ ? lang.replace('_', '-') @@ -205,7 +202,10 @@ export function prepareRequestOptions(request_options, options) { setCookieFromJar(uri, request_options.headers, options?.jar) - if (!forward_sig && (options?.sig || request_sig) && options?.getSigHeaders) { + // Has header begining from "Signature". + const prevent_sig = Object.keys(request_options.headers).some(key => /^signature/i.test(key)); + + if (!prevent_sig && (options?.sig || request_sig) && options?.getSigHeaders) { try { options.getSigHeaders(original_uri, function(error, headers) { if (error) { @@ -213,7 +213,6 @@ export function prepareRequestOptions(request_options, options) { console.error('getSigHeaders error', error); resolve(request_options); } else { - request_options.headers = request_options.headers || {}; Object.assign(request_options.headers, headers); resolve(request_options); }