mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
ed3604cd64
PR-URL: https://github.com/nodejs/node/pull/45597 Fixes: https://github.com/nodejs/node/issues/39033 Co-authored-by: Luigi Pinca <luigipinca@gmail.com> Co-authored-by: mscdex <mscdex@users.noreply.github.com> Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: Paolo Insogna <paolo@cowtech.it> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
71 lines
1.9 KiB
JavaScript
71 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
require('../common');
|
|
|
|
const assert = require('assert');
|
|
const http = require('http');
|
|
|
|
function execute(options) {
|
|
http.createServer(function(req, res) {
|
|
const expectHeaders = {
|
|
'x-foo': 'boom',
|
|
'cookie': 'a=1; b=2; c=3',
|
|
'connection': 'keep-alive',
|
|
'host': 'example.com',
|
|
};
|
|
|
|
// no Host header when you set headers an array
|
|
if (!Array.isArray(options.headers)) {
|
|
expectHeaders.host = `localhost:${this.address().port}`;
|
|
}
|
|
|
|
// no Authorization header when you set headers an array
|
|
if (options.auth && !Array.isArray(options.headers)) {
|
|
expectHeaders.authorization =
|
|
`Basic ${Buffer.from(options.auth).toString('base64')}`;
|
|
}
|
|
|
|
this.close();
|
|
|
|
assert.deepStrictEqual(req.headers, expectHeaders);
|
|
|
|
res.writeHead(200, { 'Connection': 'close' });
|
|
res.end();
|
|
}).listen(0, function() {
|
|
options = Object.assign(options, {
|
|
port: this.address().port,
|
|
path: '/'
|
|
});
|
|
const req = http.request(options);
|
|
req.end();
|
|
});
|
|
}
|
|
|
|
// Should be the same except for implicit Host header on the first two
|
|
execute({ headers: { 'x-foo': 'boom', 'cookie': 'a=1; b=2; c=3' } });
|
|
execute({ headers: { 'x-foo': 'boom', 'cookie': [ 'a=1', 'b=2', 'c=3' ] } });
|
|
execute({ headers: [
|
|
[ 'x-foo', 'boom' ],
|
|
[ 'cookie', 'a=1; b=2; c=3' ],
|
|
[ 'Host', 'example.com' ],
|
|
] });
|
|
execute({ headers: [
|
|
[ 'x-foo', 'boom' ],
|
|
[ 'cookie', [ 'a=1', 'b=2', 'c=3' ]],
|
|
[ 'Host', 'example.com' ],
|
|
] });
|
|
execute({ headers: [
|
|
[ 'x-foo', 'boom' ], [ 'cookie', 'a=1' ],
|
|
[ 'cookie', 'b=2' ], [ 'cookie', 'c=3' ],
|
|
[ 'Host', 'example.com'],
|
|
] });
|
|
|
|
// Authorization and Host header both missing from the second
|
|
execute({ auth: 'foo:bar', headers:
|
|
{ 'x-foo': 'boom', 'cookie': 'a=1; b=2; c=3' } });
|
|
execute({ auth: 'foo:bar', headers: [
|
|
[ 'x-foo', 'boom' ], [ 'cookie', 'a=1' ],
|
|
[ 'cookie', 'b=2' ], [ 'cookie', 'c=3'],
|
|
[ 'Host', 'example.com'],
|
|
] });
|