Получить имя хоста текущего запроса в node.js Express

Итак, я могу пропустить что-то простое здесь, но я не могу найти способ получить имя хоста, с которого запрашивал объект запроса, с которым я отправляю ответ.

Можно ли определить, какое имя хоста посетит пользователь из node.js?

Ответ 1

Если вы говорите о HTTP-запросе, вы можете найти его в:

request.headers.host

Но это зависит от входящего запроса.

Подробнее в http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest

Если вы ищете информацию о машине/на месте, попробуйте объект процесса.

Ответ 2

Вы можете использовать модуль os:

var os = require("os");
os.hostname();

См. http://nodejs.org/docs/latest/api/os.html#os_os_hostname

Предостережения:

  • если вы можете работать с IP-адресом - У машин может быть несколько сетевых карт, и если вы не укажете его, то node будет прослушивать все из них, поэтому вы не знаете, на какой NIC запрос пришел, прежде чем он войдет.

  • Имя хоста - это вопрос DNS - Не забывайте, что несколько псевдонимов DNS могут указывать на одну и ту же машину.

Ответ 3

Если вам требуется полное доменное имя и нет HTTP-запроса, в Linux вы можете использовать:

var child_process = require("child_process");

child_process.exec("hostname -f", function(err, stdout, stderr) {
  var hostname = stdout.trim();
});

Ответ 4

Прежде всего, прежде чем предоставить ответ, я хотел бы быть уверенным в том, что, доверяя заголовкам, вы открываете дверь для уязвимостей безопасности, таких как фишинг. Поэтому для целей перенаправления не используйте значения из заголовков без предварительной проверки URL-адреса.

Тогда ваше имя хоста вашей операционной системы может не совпадать с DNS-сервером. Фактически, один IP может иметь более одного имени DNS. Таким образом, для целей HTTP нет гарантии, что имя хоста, назначенное вашему компьютеру в конфигурации вашей операционной системы, можно использовать.

Лучший выбор, о котором я могу думать, - это получить общедоступный IP-адрес прослушивателя HTTP и разрешить его имя через DNS. Для получения дополнительной информации см. Метод dns.reverse. Но, опять же, обратите внимание, что IP может иметь несколько имен, связанных с ним.