diff --git a/lib/api/api-request.js b/lib/api/api-request.js index a96b41a06b8..ced5590d210 100644 --- a/lib/api/api-request.js +++ b/lib/api/api-request.js @@ -44,6 +44,7 @@ class RequestHandler extends AsyncResource { throw err } + this.method = method this.responseHeaders = responseHeaders || null this.opaque = opaque || null this.callback = callback @@ -114,7 +115,15 @@ class RequestHandler extends AsyncResource { const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers const contentType = parsedHeaders['content-type'] const contentLength = parsedHeaders['content-length'] - const res = new Readable({ resume, abort, contentType, contentLength, highWaterMark }) + const res = new Readable({ + resume, + abort, + contentType, + contentLength: this.method !== 'HEAD' && contentLength + ? Number(contentLength) + : null, + highWaterMark + }) if (this.removeAbortListener) { res.on('close', this.removeAbortListener) diff --git a/test/client-request.js b/test/client-request.js index 2bd38201a72..8cbad5ccb48 100644 --- a/test/client-request.js +++ b/test/client-request.js @@ -14,6 +14,39 @@ const { promisify } = require('node:util') const { NotSupportedError, InvalidArgumentError } = require('../lib/core/errors') const { parseFormDataString } = require('./utils/formdata') +test('request dump head', async (t) => { + t = tspl(t, { plan: 3 }) + + const server = createServer((req, res) => { + res.setHeader('content-length', 5 * 100) + res.flushHeaders() + res.write('hello'.repeat(100)) + }) + after(() => server.close()) + + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`) + after(() => client.destroy()) + + let dumped = false + client.on('disconnect', () => { + t.strictEqual(dumped, true) + }) + client.request({ + path: '/', + method: 'HEAD' + }, (err, { body }) => { + t.ifError(err) + body.dump({ limit: 1 }).then(() => { + dumped = true + t.ok(true, 'pass') + }) + }) + }) + + await t.completed +}) + test('request dump big', async (t) => { t = tspl(t, { plan: 3 })