当访问alpnProtocol属性时,Node.js req与req.stream.session之间的对比。

使用 allowHTTP1 体现在 Node.js v14.0.0 docs:

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
    }));
}

如例所示,下面这行是用来决定用户使用的是HTTP1.1还是HTTP2,这样就可以获得 alpnProtocol 值。

const { socket: { alpnProtocol } } = (req.httpVersion === '2.0')? req.stream.session : req;

这允许它使用 req.stream.session 或者只是 req 取决于HTTP版本。然而,尽管HTTP版本不同,将这一行替换为下面的内容仍然有效。

const { socket: { alpnProtocol } } = req;

为什么要用三元语句来选择… reqreq.stream.session 当只用 req 的工作原理?

解决方案:

在一个HTTP请求中。reqres 将会出现 IncomingMessageServerResponse 分别。在HTTP2请求中。reqres 的实例,而将成为 Http2ServerRequestHttp2ServerResponse. IncomingMessage 没有 stream 因为HTTP不支持双向的 Duplex 流;HTTP2将其作为一个功能。alpnProtocol 通过其ALPN标识符来标识正在使用的协议,ALPN标识符是其中之一。h3, h2, h2chttp/1.1.

编辑。

alpnProtocol 从任何一个几乎是相同的,唯一的区别是它的。h2c 如果是未加密的,还有一个相关的属性是 encrypted. 看看如何 它在源代码中被定义为.

本文来自投稿,不代表运维实战侠立场,如若转载,请注明出处:https://www.shizhanxia.com/693.html

(0)
上一篇 2022年6月29日 下午3:59
下一篇 2022年6月29日 下午3:59

相关推荐

发表评论

登录后才能评论