Ich benutze nodejs und expressjs. Ich frage mich, ob es so etwas wie request.headers.protocol
im ClientRequest-Objekt gibt. Ich möchte die BaseUrl für die Weblinks erstellen. Also, wenn die Anfrage über https gemacht wurde, möchte ich https in allen Links halten.Wie zu wissen, ob eine Anfrage http oder https in node.js ist
Antwort
Bearbeiten: Für Express ist es sicherer und empfohlen, req.secure
zu verwenden (wie @Andy unten empfiehlt). Während es eine ähnliche Implementierung verwendet, ist es sicher für die zukünftige Verwendung und unterstützt optional auch den Header X-Forwarded-Proto
.
Für Ihren Anwendungsfall wäre es schneller Express 'req.protocol
Eigenschaft, die entweder http
oder https
ist. Beachten Sie jedoch, dass Sie für ausgehende Links nur auf //example.com/path
verweisen können und der Browser das aktuelle Protokoll verwendet. (Siehe auch Can I change all my http:// links to just //?)
Für Knoten Request
Objekt ohne Express:
Es ist in req.connection.secure
(boolean).
Edit: Die API geändert hat, für Node 0.6.15+:
eine HTTPS-Verbindung hat req.connection.encrypted
(ein Objekt mit Informationen über die SSL-Verbindung). Eine HTTP-Verbindung hat keine req.connection.encrypted
.
auch (von the docs):
Mit HTTPS-Unterstützung verwenden request.connection.verifyPeer() und request.connection.getPeerCertificate() die Client-Authentifizierungsdaten zu erhalten.
Sie müssen das Protokoll nicht in URL angeben, daher müssen Sie sich nicht mit diesem Problem befassen.
Wenn Sie <img src="//mysite.comm/images/image.jpg" />
verwenden, verwendet der Browser HTTP, wenn die Seite in HTTP bedient wird, und verwendet HTTPS, wenn die Seite in HTTPS bereitgestellt wird. Siehe the @Jukka K. Korpela explanation in einem anderen Thread.
Dank Gerardo, sind Sie hier richtig, aber für dieses Projekt muß ich erkennen das Protokoll. – aartiles
Aber das gilt nicht für universelle Anwendungen, auf dem Server müssen Sie das Protokoll angeben –
Das ist für mich gearbeitet:
req.headers['x-forwarded-proto']
Hope this half,
E
Beachten Sie, dass dies nur funktioniert, wenn Ihre App hinter einem Reverse Proxy läuft, der diesen Header setzt - was eine gute Idee ist, aber möglicherweise nicht besonders in zB eine lokale Entwicklungsumgebung. (Denken Sie auch daran, dass, wenn Sie * nicht * hinter einem Proxy sind, ein Client den Header fälschen könnte, also seien Sie vorsichtig, wie Sie ihm vertrauen.) – natevw
Auch dies gibt Ihnen in einigen Fällen die IP nicht der HTTP-Host! –
Ich verwende OpenShift, und das ist die richtige Antwort für diesen Dienst (req.Secure und req.protocol funktionieren nicht); dachte nur, ich würde erwähnen, falls jemand anderes auch ist. – iangilman
req.secure
eine Abkürzung für req.protocol === 'https'
sollte, ist das, was Sie suchen.
Wenn Sie Ihre App hinter dem Proxy ausführen, aktivieren Sie "Trust Proxy", sodass req.protocol
das Protokoll widerspiegelt, das für die Kommunikation zwischen Client und Proxy verwendet wurde.
app.enable('trust proxy');
Wenn Sie wissen wollen, ob Anfrage http oder https diese dann req.headers.referer in Ihrem Code verwenden.split (':') [0]; dies wird zurückkehren, ob req wird http oder https
Wenn Sie Anforderungsmodul verwenden und zum Beispiel wissen wollen, welches Protokoll einige www Verwendung der Fall ist, können Sie: 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
}
});
Wenn Sie ein Benutzerprotokoll benötigen, verwenden Sie request.headers.referer.split (':') [0]; wie @Harsh gab Ihnen.
Für reinen NodeJS (dies funktioniert lokal und im Einsatz, zB hinter 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];
}
In einer Funktion:
function getBaseUrl(req) {
return req.protocol + '://' + req.headers.host + '/';
}
var baseUrl = getBaseUrl(request); // Example: http://localhost:3000/
- 1. Wie kann man wissen, ob HTTP-Anfrage GET oder POST in Struts 2 Aktion ist?
- 2. Node.js Https Anfrage Fehler
- 3. wie zu wissen, ob https server ist eine möglichkeit ssl oder zwei wege ssl
- 4. ASP.net überprüfen, ob Seite http oder https
- 5. Node.js https Anfrage bekommen ECONNRESET
- 6. PHP: HTTP oder HTTPS?
- 7. HTTP-Anfrage node.js mit mikeals 'Anfrage'
- 8. Wie kann man wissen, ob eine Kohana-Anfrage eine interne Anfrage ist?
- 9. Überprüfen Sie, ob Anfrage kommt über HTTP oder HTTPS in Socket-Listener
- 10. Was ist der beste Weg, in einem Controller zu wissen, ob die Anfrage eine XMLHTTP ist oder nicht (ZF)
- 11. HTTP Ajax Anfrage über HTTPS Seite
- 12. Wie Bild von HTTP-Anfrage zu externen API mit Node.js
- 13. HTTP-Anfrage in Node.js funktioniert nicht?
- 14. Wie kann ich eine HTTPS-Anfrage in Perl ohne LWP :: UserAgent oder HTTP :: Request senden?
- 15. Wenn eine HTTP-Webseite eine Ajax-Anfrage an eine HTTPS-URL stellt, ist die Post-Sicherheit?
- 16. Ist HTTPS Stateful oder Stateless?
- 17. Node.js: http Anfrage in win1251 Zeichensatz senden
- 18. Wie HTTP-Anfrage an https in Amazon Route53 weiterleiten?
- 19. Magento CDN http oder https
- 20. http-Proxy in Node.js
- 21. Wie überprüfen, ob URL-Schema ist Http oder Https und erstellen URLConnection abhängig davon
- 22. Wie kann ich wissen ob Login erfolgreich ist oder nicht?
- 23. ändert HTTP-Post-Anfrage auf HTTPS Post Anfrage:
- 24. Wie eine HTTPS GET Anfrage in C#
- 25. http zu https in IIS
- 26. Wie erkennt man HTTP vs https von einer Http.IncomingMessage in node.js
- 27. Was ist der Weg zu wissen, ob die Ansicht für GET oder POST in Javascript ist?
- 28. So beenden Sie eine node.js HTTP-Anfrage früh
- 29. Wie Sie wissen, ob eine PropertyInfo eine Sammlung ist
- 30. Ist es möglich, eine JSONP-Anfrage von HTTPS an HTTP zu stellen?
Ist dies immer noch im neuesten Knoten 0.10 und höher? – CMCDragonkai
Hm, können Sie dies für spätere Knotenversionen wie 0.8 und höher überprüfen, ich kann nichts von der Art in der Dokumentation finden. Aber es könnte sein, dass ich an der falschen Stelle lese. – Olga
Dieser existiert noch in Node v5.x. – Ben