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

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

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

小宇宙2020/03/24 15:22:42

这是另一种

req.hostname

Express Docs中了解它

凯小胖2020/03/24 15:22:42

您可以使用os模块:

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

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

注意事项:

  1. 如果可以使用IP地址-机器可能有多个网卡,并且除非您指定它,否则节点将侦听所有这些网卡,因此您不知道请求进入哪个NIC才进入。

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

西门2020/03/24 15:22:42

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

var child_process = require("child_process");

child_process.exec("hostname -f", function(err, stdout, stderr) {
  var hostname = stdout.trim();
});
猪猪Green2020/03/24 15:22:42

首先,在提供答案之前,我想先了解一下以下事实:通过信任标头,您可以打开网络钓鱼等安全漏洞的大门。因此,出于重定向目的,在未首先验证URL是否得到授权之前,请勿使用标头中的值。

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

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

小胖Gil2020/03/24 15:22:42

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

request.headers.host

但这取决于传入的请求。

有关更多信息,请访问http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest

如果要查找机器/本机信息,请尝试使用过程对象。