summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/unit/fetch_test.ts46
-rw-r--r--extensions/fetch/lib.rs5
2 files changed, 50 insertions, 1 deletions
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);
+ },
+);
diff --git a/extensions/fetch/lib.rs b/extensions/fetch/lib.rs
index 3652c8724..714fc43c7 100644
--- a/extensions/fetch/lib.rs
+++ b/extensions/fetch/lib.rs
@@ -29,6 +29,7 @@ use deno_web::BlobUrlStore;
use reqwest::header::HeaderMap;
use reqwest::header::HeaderName;
use reqwest::header::HeaderValue;
+use reqwest::header::HOST;
use reqwest::header::USER_AGENT;
use reqwest::redirect::Policy;
use reqwest::Body;
@@ -197,7 +198,9 @@ where
for (key, value) in args.headers {
let name = HeaderName::from_bytes(key.as_bytes()).unwrap();
let v = HeaderValue::from_str(&value).unwrap();
- request = request.header(name, v);
+ if name != HOST {
+ request = request.header(name, v);
+ }
}
let cancel_handle = CancelHandle::new_rc();