From 35cc2f38cbcfc91a6538634a03a476089b00f664 Mon Sep 17 00:00:00 2001 From: Geoff Goodman Date: Wed, 2 Mar 2022 18:41:32 -0500 Subject: [PATCH] Fix for ignoring explicit empty host header values (#1258) --- lib/client.js | 2 +- test/client-request.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/client.js b/lib/client.js index d4e026d4a30..9f3a70c5fd0 100644 --- a/lib/client.js +++ b/lib/client.js @@ -1481,7 +1481,7 @@ function write (client, request) { let header = `${method} ${path} HTTP/1.1\r\n` - if (host) { + if (typeof host === 'string') { header += `host: ${host}\r\n` } else { header += client[kHostHeader] diff --git a/test/client-request.js b/test/client-request.js index 781559a0c62..12395b219e6 100644 --- a/test/client-request.js +++ b/test/client-request.js @@ -281,6 +281,34 @@ test('request text', (t) => { }) }) +test('empty host header', (t) => { + t.plan(3) + + const server = createServer((req, res) => { + res.end(req.headers.host) + }) + t.teardown(server.close.bind(server)) + + server.listen(0, async () => { + const serverAddress = `localhost:${server.address().port}`; + const client = new Client(`http://${serverAddress}`) + t.teardown(client.destroy.bind(client)) + + const getWithHost = async (host, wanted) => { + const { body } = await client.request({ + path: '/', + method: 'GET', + headers: { host } + }) + t.strictSame(await body.text(), wanted) + } + + await getWithHost('test', 'test') + await getWithHost(undefined, serverAddress) + await getWithHost('', '') + }) +}) + test('request long multibyte text', (t) => { t.plan(1)