Möglicherweise fehlt hier etwas Einfaches, aber ich kann anscheinend keinen Weg finden, um den Hostnamen zu erhalten, von dem ein Anforderungsobjekt, an das ich eine Antwort sende, angefordert wurde.
Ist es möglich, aus node.js herauszufinden, welchen Hostnamen der Benutzer gerade besucht?
request.headers.host
- danke!Antworten:
Wenn Sie über eine HTTP-Anfrage sprechen, finden Sie den Anforderungshost unter:
Dies hängt jedoch von einer eingehenden Anfrage ab.
Weitere Informationen finden Sie unter http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest
Wenn Sie nach maschinellen / nativen Informationen suchen, probieren Sie das Prozessobjekt aus.
quelle
request.headers.host
gibt zurück,http://127.0.0.1
aber keinen Domainnamen des Produktionsserversreq.headers.host
wird vom Benutzer bereitgestellt. Ich kann eine Anfrage in 1 Zeile Python erstellen und Ihnen eine Anfrage senden, ohne dass dieses Feld Ihren Code zum Absturz bringtSie können das OS-Modul verwenden:
Siehe http://nodejs.org/docs/latest/api/os.html#os_os_hostname
Vorsichtsmaßnahmen:
Wenn Sie mit der IP-Adresse arbeiten können - Computer verfügen möglicherweise über mehrere Netzwerkkarten. Wenn Sie diese nicht angeben, überwacht der Knoten alle, sodass Sie nicht wissen, auf welcher Netzwerkkarte die Anforderung eingegangen ist, bevor sie eingeht.
Hostname ist eine DNS-Angelegenheit - Vergessen Sie nicht, dass mehrere DNS-Aliase auf denselben Computer verweisen können.
quelle
hostname
Befehl, der sollte ein gültiger DNS - Name sein, aber nicht sein erforderlich. Unter OS X erhalten Sie beispielsweise Namen,my-machine.local
die mit DNS nicht aufgelöst werden können. Um die externe IP des Computers herauszufinden, müssen Sie einen Dienst aufrufen, der diese Funktion ausführt, oder das STUN-Protokoll verwenden, um dies herauszufinden.Hier ist eine Alternative
Lesen Sie darüber in den Express-Dokumenten .
quelle
Wenn Sie einen vollständig qualifizierten Domänennamen benötigen und keine HTTP-Anforderung haben, können Sie unter Linux Folgendes verwenden:
quelle
hostname
Befehl in Windows (aber Sie rufen ihn ohne Parameter auf)Bevor ich eine Antwort gebe, möchte ich zunächst klarstellen, dass Sie durch das Vertrauen in Header die Tür zu Sicherheitslücken wie Phishing öffnen. Verwenden Sie daher für Umleitungszwecke keine Werte aus Headern, ohne vorher zu überprüfen, ob die URL autorisiert ist.
Dann stimmt der Hostname Ihres Betriebssystems möglicherweise nicht unbedingt mit dem DNS-Hostnamen überein. Tatsächlich kann eine IP mehr als einen DNS-Namen haben. Für HTTP-Zwecke kann daher nicht garantiert werden, dass der Ihrem Computer in Ihrer Betriebssystemkonfiguration zugewiesene Hostname verwendet werden kann.
Die beste Wahl, die ich mir vorstellen kann, ist, die öffentliche IP-Adresse Ihres HTTP-Listeners abzurufen und seinen Namen über DNS aufzulösen.
dns.reverse
Weitere Informationen finden Sie in der Methode. Beachten Sie jedoch auch, dass einer IP möglicherweise mehrere Namen zugeordnet sind.quelle