Skip to content

Commit

Permalink
https: only use default ALPNProtocols when appropriate
Browse files Browse the repository at this point in the history
PR-URL: nodejs#54411
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Paolo Insogna <paolo@cowtech.it>
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
mscdex authored and tpoisseau committed Nov 21, 2024
1 parent c57c64a commit 9e2424c
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 4 deletions.
10 changes: 6 additions & 4 deletions lib/https.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,23 +62,25 @@ const { validateObject } = require('internal/validators');
function Server(opts, requestListener) {
if (!(this instanceof Server)) return new Server(opts, requestListener);

let ALPNProtocols = ['http/1.1'];
if (typeof opts === 'function') {
requestListener = opts;
opts = kEmptyObject;
} else if (opts == null) {
opts = kEmptyObject;
} else {
validateObject(opts, 'options');
// Only one of ALPNProtocols and ALPNCallback can be set, so make sure we
// only set a default ALPNProtocols if the caller has not set either of them
if (opts.ALPNProtocols || opts.ALPNCallback)
ALPNProtocols = undefined;
}

FunctionPrototypeCall(storeHTTPOptions, this, opts);
FunctionPrototypeCall(tls.Server, this,
{
noDelay: true,
// http/1.0 is not defined as Protocol IDs in IANA
// https://www.iana.org/assignments/tls-extensiontype-values
// /tls-extensiontype-values.xhtml#alpn-protocol-ids
ALPNProtocols: ['http/1.1'],
ALPNProtocols,
...opts,
},
_connectionListener);
Expand Down
11 changes: 11 additions & 0 deletions test/parallel/test-https-argument-of-creating.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,14 @@ const dftProtocol = {};
0);
assert.strictEqual(server.listeners('request').length, 0);
}


// Validate that `createServer` only uses defaults when appropriate
{
const ALPNCallback = () => {};
const server = https.createServer({
ALPNCallback,
});
assert.strictEqual(server.ALPNProtocols, undefined);
assert.strictEqual(server.ALPNCallback, ALPNCallback);
}

0 comments on commit 9e2424c

Please sign in to comment.