Files
node/test/parallel/test-http-get-raw-header-names.js
Roberto Bianchi e2bc15692e http: reduce raw header name allocations
Reuse the values array instead of allocating a second result array.

Signed-off-by: Roberto Bianchi <roberto.bianchi@spendesk.com>
PR-URL: https://github.com/nodejs/node/pull/66488
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Reviewed-By: Tim Perry <pimterry@gmail.com>
2026-10-12 09:13:52 +00:00

44 lines
1.5 KiB
JavaScript

'use strict';
require('../common');
const assert = require('node:assert');
const { OutgoingMessage } = require('node:http');
const message = new OutgoingMessage();
assert.deepStrictEqual(message.getRawHeaderNames(), []);
assert.notStrictEqual(message.getRawHeaderNames(), message.getRawHeaderNames());
message.setHeader('X-First', 'first');
message.setHeader('10', 'ten');
message.setHeader('2', 'two');
message.setHeader('__proto__', 'proto');
message.setHeader('Constructor', 'constructor');
message.setHeader('X-Last', 'last');
const expected = ['2', '10', 'X-First', '__proto__', 'Constructor', 'X-Last'];
const names = message.getRawHeaderNames();
assert.deepStrictEqual(names, expected);
names[0] = 'changed';
names.push('extra');
assert.deepStrictEqual(message.getRawHeaderNames(), expected);
assert.strictEqual(message.getHeader('2'), 'two');
message.setHeader('x-FIRST', 'updated');
expected[2] = 'x-FIRST';
assert.deepStrictEqual(message.getRawHeaderNames(), expected);
message.removeHeader('X-FIRST');
message.setHeader('X-First', 'reinserted');
assert.deepStrictEqual(message.getRawHeaderNames(), [
'2', '10', '__proto__', 'Constructor', 'X-Last', 'X-First',
]);
for (const name of message.getHeaderNames()) {
message.removeHeader(name);
}
assert.deepStrictEqual(message.getRawHeaderNames(), []);
assert.notStrictEqual(message.getRawHeaderNames(), message.getRawHeaderNames());
message.setHeader('X-New', 'new');
assert.deepStrictEqual(message.getRawHeaderNames(), ['X-New']);