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

txu3uszq  于 2023-02-18  发布在  Node.js
关注(0)|答案(7)|浏览(337)

所以,我可能在这里遗漏了一些简单的东西,但是我似乎找不到一种方法来获取我向其发送响应的请求对象的主机名。
是否可以从node.js中找出用户当前访问的主机名?

2guxujil

2guxujil1#

您可以使用os模块:

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

请参见www.example.comhttp://nodejs.org/docs/latest/api/os.html#os_os_hostname
注意事项:
1.如果您可以使用IP地址--计算机可能有多个网卡,除非您指定网卡,否则节点将侦听所有网卡,因此在请求到达之前,您不知道它来自哪个网卡。
1.主机名是DNS事务--不要忘记,多个DNS别名可以指向同一台计算机。

ulydmbyx

ulydmbyx2#

如果您讨论的是HTTP请求,您可以在以下位置找到请求主机:

request.headers.host

但这取决于传入的请求。
更多信息请访问www.example.comhttp://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest
如果您要查找机器/本机信息,请尝试使用process对象。

klsxnrf1

klsxnrf13#

这里有一个替代品

req.hostname

在Express Docs中阅读相关信息。

dwbf0jvd

dwbf0jvd4#

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

var child_process = require("child_process");

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

bfrts1fy5#

首先,在给出答案之前,我想坦率地说,信任标头会为钓鱼等安全漏洞打开大门。因此,在进行重定向时,不要在未验证URL是否经过授权的情况下使用标头中的值。
那么,您的操作系统主机名可能不一定与DNS主机名匹配。事实上,一个IP可能有多个DNS名称。因此,对于HTTP目的,无法保证在操作系统配置中分配给您的机器的主机名可用。
我能想到的最佳选择是获取HTTP侦听器的公共IP并通过DNS解析其名称。有关详细信息,请参阅dns.reverse方法。但是,请再次注意,一个IP可能有多个名称与之关联。

js81xvg6

js81xvg66#

您可以简单地使用下面的代码来获取主机。

request.headers.host
0ejtzxu1

0ejtzxu17#

我认为您想要的是标识cross-origin requests,您将使用Origin头。

const origin = req.get('origin');

使用此选项可以获取请求客户端URL

相关问题