如何从node.js中的Http.IncomingMessage中检测http vs https

给定由http(s).Server Http.IncomingMessage创build的Http.IncomingMessage响应请求什么是正确的/推荐的方式来检测请求是http还是https?

一些我不知道的随机想法是正确的

  • 检查端口

     // seems wrong - might be using a different port const isHTTPS = req.socket.address().port === 443; 
  • 检查套接字是否有证书

     // does no cert mean it wasn't https? const isHTTPS = req.socket.getPeerCertificate && request.socket.getPeerCertificate() !== null; 
  • 检查套接字是否具有函数getPeerCertificate

     // does no func = !https? const isHTTPS = req.socket.getPeerCertificate !== undefined; 
  • 检查套接字是否是tls.TLSSocket

     const tls = require('tls'); const isHTTPS = req.socket instanceof tls.TLSSocket; 
  • 其他?

对于HTTPS连接, req.socket将有一个名为encrypted的属性设置为true