Skip to content

Commit 077531a

Browse files
authored
fix: ignore content-length when dumping HEAD (#3222)
1 parent 3b1b2fb commit 077531a

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

lib/api/api-request.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class RequestHandler extends AsyncResource {
4444
throw err
4545
}
4646

47+
this.method = method
4748
this.responseHeaders = responseHeaders || null
4849
this.opaque = opaque || null
4950
this.callback = callback
@@ -114,7 +115,15 @@ class RequestHandler extends AsyncResource {
114115
const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers
115116
const contentType = parsedHeaders['content-type']
116117
const contentLength = parsedHeaders['content-length']
117-
const res = new Readable({ resume, abort, contentType, contentLength, highWaterMark })
118+
const res = new Readable({
119+
resume,
120+
abort,
121+
contentType,
122+
contentLength: this.method !== 'HEAD' && contentLength
123+
? Number(contentLength)
124+
: null,
125+
highWaterMark
126+
})
118127

119128
if (this.removeAbortListener) {
120129
res.on('close', this.removeAbortListener)

test/client-request.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,39 @@ const { promisify } = require('node:util')
1414
const { NotSupportedError, InvalidArgumentError } = require('../lib/core/errors')
1515
const { parseFormDataString } = require('./utils/formdata')
1616

17+
test('request dump head', async (t) => {
18+
t = tspl(t, { plan: 3 })
19+
20+
const server = createServer((req, res) => {
21+
res.setHeader('content-length', 5 * 100)
22+
res.flushHeaders()
23+
res.write('hello'.repeat(100))
24+
})
25+
after(() => server.close())
26+
27+
server.listen(0, () => {
28+
const client = new Client(`http://localhost:${server.address().port}`)
29+
after(() => client.destroy())
30+
31+
let dumped = false
32+
client.on('disconnect', () => {
33+
t.strictEqual(dumped, true)
34+
})
35+
client.request({
36+
path: '/',
37+
method: 'HEAD'
38+
}, (err, { body }) => {
39+
t.ifError(err)
40+
body.dump({ limit: 1 }).then(() => {
41+
dumped = true
42+
t.ok(true, 'pass')
43+
})
44+
})
45+
})
46+
47+
await t.completed
48+
})
49+
1750
test('request dump big', async (t) => {
1851
t = tspl(t, { plan: 3 })
1952

0 commit comments

Comments
 (0)