diff --git a/lib/client.js b/lib/client.js index 1625b47eafe..cc33c281391 100644 --- a/lib/client.js +++ b/lib/client.js @@ -769,7 +769,7 @@ class Parser { } if (request.method === 'HEAD') { - assert(socket[kReset]) + assert(request.reset === false || socket[kReset]) return 1 } @@ -1376,8 +1376,8 @@ function write (client, request) { socket[kReset] = true } - if (reset) { - socket[kReset] = true + if (reset != null) { + socket[kReset] = reset } if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) { diff --git a/test/client-head-reset-override.js b/test/client-head-reset-override.js new file mode 100644 index 00000000000..a49bb822f82 --- /dev/null +++ b/test/client-head-reset-override.js @@ -0,0 +1,41 @@ +'use strict' + +const { createServer } = require('http') +const { test } = require('tap') +const { Client } = require('..') + +test('override HEAD reset', (t) => { + const server = createServer((req, res) => { + res.setHeader('connection', 'keep-alive') + res.end() + }) + t.teardown(server.close.bind(server)) + + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`) + t.teardown(client.close.bind(client)) + + client.on('disconnect', () => { + t.fail() + }) + + client.request({ + path: '/', + method: 'HEAD', + reset: false + }, (err, res) => { + t.error(err) + res.body.resume() + }) + + client.request({ + path: '/', + method: 'HEAD', + reset: false + }, (err, res) => { + t.error(err) + res.body.resume() + t.end() + }) + }) +})