我正在使用nodejs和expressjs.我想知道request.headers.protocol
在clientRequest对象中是否有类似的东西.我想为web链接构建baseUrl.因此,如果请求是通过https完成的,我想在所有链接中保留https.
var baseUrl = request.headers.protocol + request.headers.host;
Run Code Online (Sandbox Code Playgroud)
Lin*_*iel 84
编辑:对于Express,它更安全,建议使用req.secure
(如下面的@Andy推荐).虽然它使用类似的实现,但它将来可以安全使用,并且它还可以选择支持X-Forwarded-Proto
标头.
话虽这么说,对于你的用例,使用Express' req.protocol
属性会更快,这是http
或者https
.但请注意,对于传出链接,您只需参考//example.com/path
,浏览器将使用当前协议.(另请参阅我可以将所有http://链接更改为//?)
对于Request
没有Express的节点对象:
它在req.connection.secure
(布尔)中.
编辑: 对于Node 0.6.15+,API已更改:
HTTPS连接具有req.connection.encrypted
(包含SSL连接信息的对象).HTTP连接没有req.connection.encrypted
.
另外(来自文档):
通过HTTPS支持,使用request.connection.verifyPeer()和request.connection.getPeerCertificate()来获取客户端的身份验证详细信息.
Ben*_*air 44
req.secure
是req.protocol === 'https'
你应该寻找的简写.
如果您在代理后面运行您的应用程序,请启用"信任代理",以便req.protocol
反映用于在客户端和代理之间进行通信的协议.
app.enable('trust proxy');
对于纯 NodeJS(这在本地工作和部署,例如在 Nginx 后面):
function getProtocol (req) {
var proto = req.connection.encrypted ? 'https' : 'http';
// only do this if you trust the proxy
proto = req.headers['x-forwarded-proto'] || proto;
return proto.split(/\s*,\s*/)[0];
}
Run Code Online (Sandbox Code Playgroud)
您无需在URL中指定协议,因此您无需担心此问题.
如果您使用<img src="//mysite.comm/images/image.jpg" />
浏览器,则在HTTP中提供页面时将使用HTTP,如果页面在HTTPS中提供,则将使用HTTPS.请参阅另一个帖子中的@Jukka K. Korpela解释.
小智 5
如果您想知道请求是http还是https,请在代码 req.headers.referer.split(':')[0];中使用它。 这将返回req是http还是https
归档时间: |
|
查看次数: |
61590 次 |
最近记录: |