From ff572f47c962904b30c3ab573042976841dbdaa3 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Wed, 17 Jun 2026 13:19:04 -0500 Subject: [PATCH] feat: support optimizeEmptyRequests node option handling --- package.json | 2 +- test/test.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index de69a68..5d3087b 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", - "on-finished": "^2.4.1", + "on-finished": "jshttp/on-finished#v3", "parseurl": "^1.3.3", "statuses": "^2.0.2" }, diff --git a/test/test.js b/test/test.js index 516e088..2b04446 100644 --- a/test/test.js +++ b/test/test.js @@ -662,6 +662,52 @@ var topDescribe = function (type, createServer) { }) } +describe('with optimizeEmptyRequests', function () { + function requestFinalhandler (method, callback) { + var server = http.createServer({ optimizeEmptyRequests: true }, function (req, res) { + finalhandler(req, res)() + }) + + server.listen(0, function () { + var port = this.address().port + var settled = false + var finish = function (err, statusCode) { + if (settled) return + settled = true + server.close() + callback(err, statusCode) + } + + var req = http.request({ host: '127.0.0.1', port: port, path: '/foo', method: method }, function (res) { + res.resume() + res.on('end', function () { finish(null, res.statusCode) }) + }) + req.on('error', finish) + req.setTimeout(1000, function () { + req.destroy() + finish(new Error('finalhandler never sent a response (on-finished did not fire for the dumped request)')) + }) + req.end() + }) + } + + it('should still send a 404 for a body-less GET request', function (done) { + requestFinalhandler('GET', function (err, statusCode) { + if (err) return done(err) + assert.strictEqual(statusCode, 404) + done() + }) + }) + + it('should still send a 404 for a body-less HEAD request', function (done) { + requestFinalhandler('HEAD', function (err, statusCode) { + if (err) return done(err) + assert.strictEqual(statusCode, 404) + done() + }) + }) +}) + var servers = [ ['http', createHTTPServer], ['http2', createHTTP2Server]