Skip to content

Commit 2ea4ea6

Browse files
committed
fix: ignore content-length when dumping HEAD
1 parent 9f26aff commit 2ea4ea6

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

lib/api/api-request.js

+10-2
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
@@ -110,8 +111,15 @@ class RequestHandler extends AsyncResource {
110111

111112
const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers
112113
const contentType = parsedHeaders['content-type']
113-
const contentLength = parsedHeaders['content-length']
114-
const body = new Readable({ resume, abort, contentType, contentLength, highWaterMark })
114+
const body = new Readable({
115+
resume,
116+
abort,
117+
contentType,
118+
contentLength: this.method !== 'HEAD' && parsedHeaders['content-length']
119+
? Number(parsedHeaders['content-length'])
120+
: null,
121+
highWaterMark
122+
})
115123

116124
if (this.removeAbortListener) {
117125
// TODO (fix): 'close' is sufficient but breaks tests.

test/client-request.js

+33
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)