所以,我可能在这里遗漏了一些简单的东西,但我似乎找不到一种方法来获取我正在向其发送响应的请求对象所请求的主机名。
是否可以从node.js中找出用户当前正在访问的主机名?
您可以使用操作系统模块:
var os = require("os");
os.hostname();
参见 http://nodejs.org/docs/latest/api/os.html#os_os_hostname
注意事项:
如果您可以使用该 IP 地址 -- 机器可能有多个网卡,除非您指定,否则节点将侦听所有网卡,因此您在请求传入之前不知道请求来自哪个网卡。
主机名是 DNS 问题 -- 不要忘记多个 DNS 别名可以指向同一台机器。
如果您谈论的是 HTTP 请求,您可以在以下位置找到请求主机:
request.headers.host
但这依赖于传入的请求。
更多信息请访问 http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest
如果您正在寻找机器/本机信息,请尝试进程对象。
首先,在提供答案之前,我想先坦白这样一个事实:通过信任标头,您将打开网络钓鱼等安全漏洞的大门。因此,出于重定向目的,在未首先验证 URL 是否已授权的情况下,请勿使用标头中的值。
然后,您的操作系统主机名可能不一定与 DNS 主机名匹配。事实上,一个 IP 可能有多个 DNS 名称。因此,出于 HTTP 目的,无法保证在操作系统配置中分配给您的计算机的主机名可用。
我能想到的最佳选择是获取您的 HTTP 侦听器公共 IP 并通过 DNS 解析其名称。有关更多信息,请参阅
dns.reverse
方法。但再次请注意,一个 IP 可能有多个与其关联的名称。
如果您需要完全限定的域名并且没有 HTTP 请求,在 Linux 上,您可以使用:
var child_process = require("child_process");
child_process.exec("hostname -f", function(err, stdout, stderr) {
var hostname = stdout.trim();
});
您可以简单地使用以下代码来获取主机。
request.headers.host
试试这个
${req.protocol}://${req.get('host')}
您可以从
headers
的 request
获取客户端 url,它有一个属性 origin
。所以:
request.headers.origin