J'utilise nodejs et expressjs. Je me demande s'il existe quelque chose comme request.headers.protocol
dans l'objet clientRequest. Je voudrais construire la baseUrl pour les liens Web. Donc, si la demande a été faite via https, je souhaite conserver https dans tous les liens.
var baseUrl = request.headers.protocol + request.headers.Host;
Edit: Pour Express, il est recommandé d'utiliser req.secure
(comme @Andy le recommande plus bas). Bien qu'il utilise une implémentation similaire, il sera sans danger pour une utilisation future et il prend également en charge éventuellement l'en-tête X-Forwarded-Proto
.
Cela étant dit, dans votre cas d'utilisation, il serait plus rapide d'utiliser Express ' req.protocol
property, qui est soit http
, soit https
. Notez cependant que pour les liens sortants, vous pouvez simplement vous référer à //example.com/path
et le navigateur utilisera le protocole actuel. (Voir aussi Puis-je changer tous mes http: // liens en seulement //? )
Pour un objet noeud Request
sans Express:
C'est dans req.connection.secure
(booléen).
Edit: L'API a changé pour Node 0.6.15+:
Une connexion HTTPS a req.connection.encrypted
(un objet avec des informations sur la connexion SSL). Une connexion HTTP n'a pas req.connection.encrypted
.
Aussi (de les docs ):
Avec le support HTTPS, utilisez request.connection.verifyPeer () et request.connection.getPeerCertificate () pour obtenir les détails de l'authentification du client.
Vous n'avez pas besoin de spécifier le protocole dans l'URL, vous n'avez donc pas besoin de vous préoccuper de ce problème.
Si vous utilisez <img src="//mysite.comm/images/image.jpg" />
, le navigateur utilisera HTTP si la page est servie en HTTP et utilisera HTTPS si la page est servie en HTTPS. Voir l'explication de @Jukka K. Korpela dans un autre fil.
Si vous voulez savoir si request est http ou https, utilisez ceci dans votre code req.headers.referer.split (':') [0]; cela retournera si req est http ou https
Pour NodeJS pur (cela fonctionne localement et déployé, par exemple derrière 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];
}
Cela a fonctionné pour moi:
req.headers['x-forwarded-proto']
J'espère que cela a aidé,
E
Si vous utilisez le module de requête et souhaitez par exemple connaître le protocole utilisé par www, vous pouvez utiliser: 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
}
});
Si vous avez besoin du protocole utilisateur, utilisez request.headers.referer.split (':') [0]; juste comme @Harsh vous a donné.
C'est ce qui fonctionne pour moi:
getAPIHostAndPort = function(req, appendEndSlash) {
return (req.connection && req.connection.encrypted ? 'https' : 'http') + '://' + req.headers.Host + (appendEndSlash ? '/' : '');
}