From de24917cada29c19fa77cca64dce02fe6169c606 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Fri, 10 Jan 2025 18:33:40 +0100 Subject: [PATCH] fix(proxy): pass `host` for local targets (#946) --- docs/2.utils/98.advanced.md | 2 +- src/utils/proxy.ts | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/2.utils/98.advanced.md b/docs/2.utils/98.advanced.md index cd7b5864..f1357eec 100644 --- a/docs/2.utils/98.advanced.md +++ b/docs/2.utils/98.advanced.md @@ -117,7 +117,7 @@ Check request caching headers (`If-Modified-Since`) and add caching headers (Las Make a fetch request with the event's context and headers. -### `getProxyRequestHeaders(event)` +### `getProxyRequestHeaders(event, opts?: { host? })` Get the request headers object without headers known to cause issues when proxying. diff --git a/src/utils/proxy.ts b/src/utils/proxy.ts index 5ca97671..f2dc4475 100644 --- a/src/utils/proxy.ts +++ b/src/utils/proxy.ts @@ -58,7 +58,7 @@ export async function proxyRequest( // Headers const fetchHeaders = mergeHeaders( - getProxyRequestHeaders(event), + getProxyRequestHeaders(event, { host: target.startsWith("/") }), opts.fetchOptions?.headers, opts.headers, ); @@ -174,11 +174,14 @@ export async function sendProxy( /** * Get the request headers object without headers known to cause issues when proxying. */ -export function getProxyRequestHeaders(event: H3Event) { +export function getProxyRequestHeaders( + event: H3Event, + opts?: { host?: boolean }, +) { const headers = Object.create(null); const reqHeaders = getRequestHeaders(event); for (const name in reqHeaders) { - if (!ignoredHeaders.has(name)) { + if (!ignoredHeaders.has(name) || (name === "host" && opts?.host)) { headers[name] = reqHeaders[name]; } } @@ -202,7 +205,9 @@ export function fetchWithEvent< ...init, context: init?.context || event.context, headers: { - ...getProxyRequestHeaders(event), + ...getProxyRequestHeaders(event, { + host: typeof req === "string" && req.startsWith("/"), + }), ...init?.headers, }, });