I have condiiton in my http server that check if req.headers["host"] is undefined or not. I am using supertest and mocha to send GET request. I tried to use unset("Host"), but supertest still send header "Host"
http server:
const http_server = http.createServer(function (req, res) {
console.log("http", req.method, req.url, req.headers);
const url_path = url.parse(req.url, true).pathname;
const query = url.parse(req.url, true).query;
if (req.method === "GET" && req.headers["host"] !== undefined) {
// force create session
const session = getSession(req);
console.log(`HOST === ${req.headers["host"]}`)
res.removeHeader("Date");
res.removeHeader("Transfer-Encoding");
res.writeHead(302, {
Location: getNewLocation(req.headers["host"], url_path, query),
Connection: "close",
});
res.end();
return;
}
handler(req, res);
});
test
it("should return index.html", (done) => {
request(http_server)
.get("/")
.unset("Host")
.expect(200)
.expect("Connection", "close")
.expect("Etag", '"167-110-5f0633df"')
.expect("Last-Modified", "Wed, 08 Jul 2020 21:00:15 GMT")
.expect("Date", date_regex)
.expect("Cache-Control", "no-cache")
.expect("Expires", "0")
.expect("Content-Type", "text/html")
.expect("Content-Length", `<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="0; URL=/webpages/login.html" />
</head>
</html>
`.length)
.expect(res => assert.strictEqual(res.text, `<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="0; URL=/webpages/login.html" />
</head>
</html>
`))
.end(done)
})
I am trying to remove header "Host", so code would not fall into condition where it sends 302 status code