一尘不染

如何知道node.js中的请求是http还是https

node.js

我正在使用nodejs和expressjs。我想知道request.headers.protocolclientRequest对象中是否有类似的东西。我想为Web链接构建baseUrl。因此,如果请求是通过https完成的,我想在所有链接中保留https。

    var baseUrl = request.headers.protocol + request.headers.host;

阅读 652

收藏
2020-07-07

共1个答案

一尘不染

编辑:
对于Express,它更安全,建议使用req.secure(如@Andy在下面建议)。尽管它使用类似的实现,但将来可以安全使用,并且还可以选择支持X-Forwarded- Proto标头。

话虽如此,对于您的用例而言,使用Express的req.protocol属性(http或)会更快https。但是请注意,对于传出链接,您只能参考//example.com/path,浏览器将使用当前协议。

对于Request不带Express的节点对象:

req.connection.secure(布尔值)中。

编辑: 对于 Node 0.6.15 + ,API已更改:

HTTPS连接具有req.connection.encrypted(一个具有SSL连接信息的对象)。HTTP连接没有req.connection.encrypted

另外(来自docs):

有了HTTPS支持,请使用request.connection.verifyPeer()和request.connection.getPeerCertificate()来获取客户端的身份验证详细信息。

2020-07-07