そのため、ここでは単純なものが欠落している可能性がありますが、応答の送信先である要求オブジェクトが要求されたホスト名を取得する方法を見つけることができないようです。
ユーザーがnode.jsから現在アクセスしているホスト名を把握することはできますか?
request.headers.host
。
そのため、ここでは単純なものが欠落している可能性がありますが、応答の送信先である要求オブジェクトが要求されたホスト名を取得する方法を見つけることができないようです。
ユーザーがnode.jsから現在アクセスしているホスト名を把握することはできますか?
request.headers.host
。
回答:
HTTPリクエストについて話している場合、リクエストホストは次の場所にあります。
request.headers.host
しかし、それは着信要求に依存しています。
詳しくはhttp://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest
マシン/ネイティブ情報を探している場合は、プロセスオブジェクトを試してください。
request.headers.host
が返されますhttp://127.0.0.1
が
req.headers.host
ユーザーによって提供されます。Pythonの1行でリクエストを作成し、そのフィールドなしでリクエストを送信してコードをクラッシュさせることができます
あなたはosモジュールを使うことができます:
var os = require("os");
os.hostname();
http://nodejs.org/docs/latest/api/os.html#os_os_hostnameを参照してください
警告:
IPアドレスを使用できる場合-マシンには複数のネットワークカードがあり、それを指定しない限り、ノードはそれらすべてをリッスンするため、リクエストが入ってくる前に、リクエストが入ったNICがわかりません。
ホスト名はDNSの問題です-複数のDNSエイリアスが同じマシンをポイントできることを忘れないでください。
hostname
コマンドと相関します。たとえば、OS Xでは、DNSで解決できないような名前が表示されます。マシンの外部IPを把握するには、この機能を実行するサービスにアクセスするか、STUNプロトコルを使用して把握する必要があります。my-machine.local
完全修飾ドメイン名が必要で、HTTPリクエストがない場合、Linuxでは次のように使用できます。
var child_process = require("child_process");
child_process.exec("hostname -f", function(err, stdout, stderr) {
var hostname = stdout.trim();
});
hostname
Windowsにもコマンドがあります(ただし、パラメーターなしで起動します)
まず、回答を提供する前に、ヘッダーを信頼することで、フィッシングなどのセキュリティの脆弱性への扉を開いているという事実について前向きに考えたいと思います。したがって、リダイレクトの目的で、URLが承認されていることを最初に検証することなくヘッダーの値を使用しないでください。
その場合、オペレーティングシステムのホスト名は必ずしもDNSのホスト名と一致しない場合があります。実際、1つのIPに複数のDNS名がある場合があります。したがって、HTTPの目的では、オペレーティングシステム構成でマシンに割り当てられたホスト名が使用可能である保証はありません。
私が考えることができる最良の選択は、HTTPリスナーのパブリックIPを取得し、その名前をDNS経由で解決することです。詳細については、dns.reverse
メソッドを参照してください。ただし、繰り返しになりますが、IPには複数の名前が関連付けられている場合があります。