我正在使用 nodejs 和 expressjs。我想知道request.headers.protocol
clientRequest 对象中是否有类似的东西。我想为 Web 链接构建 baseUrl。因此,如果请求是通过 https 完成的,我想在所有链接中保留 https。
var baseUrl = request.headers.protocol + request.headers.host;
编辑:对于 Express,它更安全,建议使用req.secure
(正如@Andy 在下面推荐的那样)。虽然它使用类似的实现,但它对将来的使用是安全的,并且它还可以选择支持X-Forwarded-Proto
标头。
话虽如此,对于您的用例,使用 Express 的属性会更快req.protocol
,即http
or 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() 获取客户端的身份验证详细信息。
req.secure
是req.protocol === 'https'
应该是你要找的东西的简写。
如果您在代理后面运行您的应用程序,请启用“信任代理”以req.protocol
反映用于在客户端和代理之间进行通信的协议。
app.enable('trust proxy');
您无需在 URL 中指定协议,因此您无需为这个问题烦恼。
如果您使用<img src="//mysite.comm/images/image.jpg" />
浏览器,如果页面以 HTTP 提供,则浏览器将使用 HTTP;如果页面以 HTTPS 提供,则将使用 HTTPS。请参阅另一个线程中的@Jukka K. Korpela 解释。
对于纯 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];
}
如果您想知道请求是 http 还是 https,请在您的代码中使用:
req.headers.referer.split(':')[0];
这将返回 req 是 http 还是 https。
这对我有用:
req.headers['x-forwarded-proto']
希望这有帮助,
乙
这对我有用:
getAPIHostAndPort = function(req, appendEndSlash) {
return (req.connection && req.connection.encrypted ? 'https' : 'http') + '://' + req.headers.host + (appendEndSlash ? '/' : '');
}
如果您正在使用请求模块并且例如想知道某些 www 使用什么协议,您可以使用:response.request.uri.protocol
request(YOUR_TARGET, function(error, response, body){
if (error){
console.log(error);
}
else {
console.log(response.request.uri.protocol); // will show HTTP or HTTPS
}
});
如果您需要用户协议,请使用request.headers.referer.split(':')[0]; 就像@Harsh给你的一样。
如果您使用的是 Nginx 等代理服务器,您应该proxy_set_header X-Forwarded-Proto https;
在其配置文件中进行设置,因此如果您使用的是TSL
express,则可以识别https
为req.headers['x-forwarded-proto']
value 或true
forreq.secure
如果要查找请求协议字符串:http 或(对于 TLS 请求)https 只需使用
req.protocol