Node.jsでホスト名取得する2種類の方法…それぞれの違い

Node.jsでホスト名を取得したい…

ホスト名といった場合、2つの意味があります。

  • 動いてるOS自体のホスト名
  • HTTPリクエストのホスト名

この2つは全く意味も違うので、
ホスト名をnode.jsで取得する方法をまとめます。

ホスト名取得でやってはいけないこと

Node.jsでホスト名取得したいとき、
やってはいけないことが1つあります。

それは window.location.host  を参照すること

試しにNode.js+Expressで次コードを書きました。

▼ これでホスト名取得してみたが…

▼ そもそもwindow自体が参照できない

というか window.location.hostname  の参照は不可能です。

ブラウザ上だと window  がグローバルオブジェクトだけど、Nodeにはそんなものないってこと。ちなみにNode.jsのグローバルオブジェクトは global  です。

ホスト名取得するときは気を付けるべき

OS自体のホスト名を取得する方法

Node.jsをホスティングしてるOSのホスト名

これを取得するにはosモジュールが使えます。

▼ 具体的には os.hostname() を使う

os.hostname()
Added in: v0.3.3
Returns: <string>
Returns the host name of the operating system as a string.

引用元 : https://nodejs.org/docs/latest/api/os.html#os_os_hostname

ただしHTTPリクエストのホスト名じゃありません。

あくまでNodeが動いてるOSホスト名が取得できます。

▼ こんなコードでホスト名取得できる

返されるのはOS固有のホスト名です。

HTTPリクエストに関わらず一意になります。

HTTPリクエストのホスト名取得する方法

お次はHTTPリクエストのホスト名取得

例えば同じサーバー上であったとしても、
同一IPアドレスに複数ドメインが紐づけられてます。

▼ ある同一IPへの複数ドメイン対応例

  • 172.217.175.238 => hogehoge.com
  • 172.217.175.238 => fugafuga.com
  • 172.217.175.238 => piyopiyo.com

なにかしらHTTPリクエストされたとき、
そのホスト名を取得したい場面もあります。

それには以下を参照すればOKです。

  • request.headers.host
  • request.hostname

試しにこんなコードを書いてみました。

▼ HTTPリクエストのホスト名取得コード例

▼ 上記コードの出力結果

たとえばExpressだとルーティングによりGET/POSTのHTTPリクエストを処理できますが、そのコールバックには必ず request  が渡されます。

そこからHTTPリクエストしてきたホスト名取得が可能です。

ホスト名をNode.jsで取得の方法まとめ

簡単にホスト名取得について箇条書きします。

  • OSそのもののホスト名を取得する
    Node.jsを動かしているOSのホスト名を取得するなら、 os.hostname()  から参照できる。HTTPリクエストに関わらず一意になる
  • HTTPリクエストのホスト名を取得する
    Node.jsに送られてきたHTTPリクエストのホスト名を取得したいなら、 request.headers.host  , request.hostname  などで取得可能。ブラウザのアドレス欄に入力されたURLのホスト名が返るイメージ

以上、Node.jsでホスト名取得の方法でした。

状況によって2つの方法を使い分けてください。ではまた