benchmark: add implicit-framing case to http/set-header

The existing `setHeader` and `setHeaderWH` cases set `Content-Length`
explicitly, and `normal` passes every header to `writeHead()`. The very
common handler shape `res.setHeader(...)` + `res.end(body)`, where
`end()` derives the framing, exercises a different path and was not
covered.

Signed-off-by: Matteo Collina <hello@matteocollina.com>
PR-URL: https://github.com/nodejs/node/pull/66420
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
This commit is contained in:
Matteo Collina authored and Node.js GitHub Bot committed 2026-10-03 09:50:37 +00:00
1 parent b933d20c3f
commit 40933d58ae
2 files changed
+8 -1

No files matched your search

+6
View File
@@ -114,6 +114,12 @@ module.exports = http.createServer((req, res) => {
else
res.writeHead(status, { 'Content-Length': len.toString() });
break;
case 'setHeaderImplicit':
// Let end() derive the message framing: no Content-Length or
// Transfer-Encoding header and no writeHead() call.
res.statusCode = status;
res.setHeader('Content-Type', 'text/plain');
break;
default:
if (chunkedEnc) {
res.writeHead(status, {
+2 -1
View File
@@ -2,7 +2,7 @@
const common = require('../common.js');
const bench = common.createBenchmark(main, {
res: ['normal', 'setHeader', 'setHeaderWH'],
res: ['normal', 'setHeader', 'setHeaderWH', 'setHeaderImplicit'],
duration: 5,
});
@@ -15,6 +15,7 @@ const c = 50;
// normal: writeHead(status, {...})
// setHeader: statusCode = status, setHeader(...) x2
// setHeaderWH: setHeader(...), writeHead(status, ...)
// setHeaderImplicit: statusCode = status, setHeader(...) x1, framing left to end()
function main({ res, duration }) {
const server = require('../fixtures/simple-http-server.js')
.listen(0)