Использование allowHTTP1
иллюстрируется в документах Node.js v14.0.0 :
const server = http2.createSecureServer(
{ cert, key, allowHTTP1: true },
onRequest
).listen(4443);
function onRequest(req, res) {
// Detects if it is a HTTPS request or HTTP/2
const { socket: { alpnProtocol } } = (req.httpVersion === '2.0')? req.stream.session : req;
res.writeHead(200, { 'content-type': 'application/json' });
res.end(JSON.stringify({
alpnProtocol,
httpVersion: req.httpVersion
}));
}
Как показано в примере, следующее строка используется для определения, использует ли пользователь HTTP / 1.1 или HTTP / 2, чтобы он мог получить значение alpnProtocol
:
const { socket: { alpnProtocol } } = (req.httpVersion === '2.0')? req.stream.session : req;
Это позволяет ему использовать req.stream.session
или просто req
в зависимости от версии HTTP. Тем не менее, замена строки следующим по-прежнему работает, несмотря на версию HTTP:
const { socket: { alpnProtocol } } = req;
В чем причина использования троичного оператора для выбора между req
и req.stream.session
при использовании просто req
работает?