diff --git a/lib/_http_server.js b/lib/_http_server.js index e00d3cac0490e5..1da38808c0f8b8 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -916,8 +916,6 @@ function socketOnError(e) { } function onParserExecuteCommon(server, socket, parser, state, ret, d) { - resetSocketTimeout(server, socket, state); - if (ret instanceof Error) { prepareError(ret, parser, d); debug('parse error', ret); diff --git a/test/parallel/test-http-keep-alive-empty-line.mjs b/test/parallel/test-http-keep-alive-empty-line.mjs new file mode 100644 index 00000000000000..a104a0dff2dc25 --- /dev/null +++ b/test/parallel/test-http-keep-alive-empty-line.mjs @@ -0,0 +1,50 @@ +import * as common from '../common/index.mjs'; +import assert from 'node:assert'; +import { createServer } from 'node:http'; +import { connect } from 'node:net'; + +const server = createServer({ + connectionsCheckingInterval: 100, + headersTimeout: 100, + keepAliveTimeout: 300 +}, (req, res) => { + res.writeHead(404); + res.end(); + + req.socket.on('close', common.mustCall(() => { + server.close(); + })); +}); + +server.listen(0, () => { + const client = connect({ + host: 'localhost', + port: server.address().port, + }, () => { + client.write( + 'GET / HTTP/1.1\r\n' + + 'Host: localhost:3000\r\n' + + 'Content-Length: 0\r\n' + + '\r\n' + ); + + setTimeout(() => { + client.write('\r\n'); + }, 100); + + let responseBuffer = ''; + + client.on('data', (chunk) => { + responseBuffer += chunk.toString(); + + // Check if we've received the full header (ending with \r\n\r\n) + if (responseBuffer.includes('\r\n\r\n')) { + const statusLine = responseBuffer.split('\r\n')[0]; + const status = statusLine.split(' ')[1]; + assert.strictEqual(status, '404'); + client.end(); + } + }); + client.on('end', common.mustCall()); + }); +});