From cd59601b34f0c619c037152ec49d7ee2d317b9c9 Mon Sep 17 00:00:00 2001 From: Vladimir Ivanov Date: Tue, 22 Jun 2021 06:42:04 +0300 Subject: fix(extensions/fetch): Filter out custom HOST headers (#11020) This commit updates "fetch" API to ignore custom "Host" headers and return value provided by "reqwest". --- cli/tests/unit/fetch_test.ts | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'cli/tests/unit') diff --git a/cli/tests/unit/fetch_test.ts b/cli/tests/unit/fetch_test.ts index c2224083d..cf7510ea2 100644 --- a/cli/tests/unit/fetch_test.ts +++ b/cli/tests/unit/fetch_test.ts @@ -1149,3 +1149,49 @@ unitTest({}, function fetchWritableRespProps(): void { assertEquals(original.status, new_.status); assertEquals(new_.headers.get("x-deno"), "foo"); }); + +function returnHostHeaderServer(addr: string): Deno.Listener { + const [hostname, port] = addr.split(":"); + const listener = Deno.listen({ + hostname, + port: Number(port), + }) as Deno.Listener; + + listener.accept().then(async (conn: Deno.Conn) => { + const httpConn = Deno.serveHttp(conn); + + await httpConn.nextRequest() + .then(async (requestEvent: Deno.RequestEvent | null) => { + const hostHeader = requestEvent?.request.headers.get("Host"); + const headersToReturn = hostHeader ? { "Host": hostHeader } : undefined; + + await requestEvent?.respondWith( + new Response("", { + status: 200, + headers: headersToReturn, + }), + ); + }); + + httpConn.close(); + }); + + return listener; +} + +unitTest( + { perms: { net: true } }, + async function fetchFilterOutCustomHostHeader(): Promise< + void + > { + const addr = "127.0.0.1:4502"; + const listener = returnHostHeaderServer(addr); + const response = await fetch(`http://${addr}/`, { + headers: { "Host": "example.com" }, + }); + await response.text(); + listener.close(); + + assertEquals(response.headers.get("Host"), addr); + }, +); -- cgit v1.2.3