在node.js Express中获取当前请求的主机名

时间:2011-09-21 21:40:57

标签: node.js express hostname

所以,我可能在这里遗漏了一些简单的东西,但我似乎无法找到一种方法来获取我要发送响应的请求对象的主机名。

是否可以从node.js中找出用户当前访问的主机名?

5 个答案:

答案 0 :(得分:268)

您可以使用os模块:

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

请参阅http://nodejs.org/docs/latest/api/os.html#os_os_hostname

注意事项:

  1. 如果您可以使用IP地址 - 机器可能有多个网卡,除非你指定它,否则节点会监听所有网卡,所以在它进入之前你不知道请求进来的是哪个网卡。

  2. 主机名是DNS问题 - 不要忘记,几个DNS别名可以指向同一台计算机。

答案 1 :(得分:167)

如果您正在谈论HTTP请求,可以在以下位置找到请求主机:

request.headers.host

但这取决于传入的请求。

更多http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest

如果您正在寻找机器/本机信息,请尝试处理对象。

答案 2 :(得分:9)

这是另一个

req.hostname

Express Docs中了解它。

答案 3 :(得分:7)

如果您需要完全限定的域名且没有HTTP请求,则可以在Linux上使用:

var child_process = require("child_process");

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

答案 4 :(得分:5)

首先,在提供答案之前,我想提前了解一下这样一个事实:通过信任标题,您可以打开安全漏洞(如网络钓鱼)的大门。因此,对于重定向目的,如果没有首先验证URL是否已授权,请不要使用标头中的值。

然后,您的操作系统主机名可能不一定与DNS匹配。实际上,一个IP可能有多个DNS名称。因此,对于HTTP目的,无法保证在您的操作系统配置中分配给您的计算机的主机名是可用的。

我能想到的最佳选择是获取HTTP侦听器公共IP并通过DNS解析其名称。有关详细信息,请参阅dns.reverse方法。但是,再次注意,IP可能有多个与之关联的名称。