Skip to content

Commit 977b0ed

Browse files
BlackYoupruyadorno
authored andcommitted
http: allow Content-Length header for 304 responses
Fixes: #31037 PR-URL: #34835 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ricky Zhou <0x19951125@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
1 parent df70861 commit 977b0ed

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

lib/_http_client.js

+5
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,11 @@ function parserOnIncomingClient(res, shouldKeepAlive) {
643643
if (method === 'HEAD')
644644
return 1; // Skip body but don't treat as Upgrade.
645645

646+
if (res.statusCode === 304) {
647+
res.complete = true;
648+
return 1; // Skip body as there won't be any
649+
}
650+
646651
return 0; // No special treatment.
647652
}
648653

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
'use strict';
2+
const common = require('../common');
3+
4+
// This test ensures that the http-parser doesn't expect a body when
5+
// a 304 Not Modified response has a non-zero Content-Length header
6+
7+
const assert = require('assert');
8+
const http = require('http');
9+
10+
const server = http.createServer(common.mustCall((req, res) => {
11+
res.setHeader('Content-Length', 11);
12+
res.statusCode = 304;
13+
res.end(null);
14+
}));
15+
16+
server.listen(0, () => {
17+
const request = http.request({
18+
port: server.address().port,
19+
});
20+
21+
request.on('response', common.mustCall((response) => {
22+
response.on('data', common.mustNotCall());
23+
response.on('aborted', common.mustNotCall());
24+
response.on('end', common.mustCall(() => {
25+
assert.strictEqual(response.headers['content-length'], '11');
26+
assert.strictEqual(response.statusCode, 304);
27+
server.close();
28+
}));
29+
}));
30+
31+
request.end(null);
32+
});

0 commit comments

Comments
 (0)