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

问题描述 投票:0回答:9

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

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

node.js express hostname
9个回答
293
投票

您可以使用操作系统模块:

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

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

注意事项:

  1. 如果您可以使用该 IP 地址 -- 机器可能有多个网卡,除非您指定,否则节点将侦听所有网卡,因此您在请求传入之前不知道请求来自哪个网卡。

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


269
投票

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

request.headers.host

但这依赖于传入的请求。

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

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


50
投票

这是一个替代方案

req.hostname

Express 文档中阅读相关内容。


10
投票

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

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

我能想到的最佳选择是获取您的 HTTP 侦听器公共 IP 并通过 DNS 解析其名称。有关更多信息,请参阅

dns.reverse
方法。但再次请注意,一个 IP 可能有多个与其关联的名称。


9
投票

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

var child_process = require("child_process");

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

1
投票

我认为你想要的是识别跨源请求,你可以使用 Origin 标头。

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

使用这个你可以获得请求客户端 URL


1
投票

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

request.headers.host

0
投票

试试这个

${req.protocol}://${req.get('host')}


-1
投票

您可以从

headers
request
获取客户端 url,它有一个属性
origin
。所以:

request.headers.origin
© www.soinside.com 2019 - 2024. All rights reserved.