所以,也许我错过了一些简单的东西,但是我似乎找不到一种方法来获取请求对象的主机名,这个请求对象是我正在向其中发送响应。
在node.js中是否有可能确定用户当前正在访问的主机名?
你可以使用os模块:
var os = require("os");
os.hostname();
请查看http://nodejs.org/docs/latest/api/os.html#os_os_hostname
注意事项:
如果您可以使用IP地址 -- 机器可能有多个网络卡,除非指定,否则Node将在所有网络卡上监听,因此在请求进入之前,您不知道请求是从哪个网卡进入的。
主机名是DNS问题 -- 别忘了多个DNS别名可以指向同一台机器。
hostname
命令相关,该命令应该是一个有效的DNS名称,但不一定要求是。例如,在OS X下,你会得到像my-machine.local
这样的名称,它无法通过DNS解析。如果想找到机器的外部IP,则需要访问执行此功能的服务或使用STUN协议来找到它。 - tadman如果你在谈论一个HTTP请求,你可以在以下位置找到请求的主机:
request.headers.host
但这需要依赖一个传入的请求。
更多信息请查看http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest
如果您正在寻找机器/本地信息,请尝试使用 process 对象。
request.headers.host
返回的是http://127.0.0.1
而不是生产服务器的域名。 - Greenreq.headers.host
是由用户提供的。我可以用一行 Python 代码构造一个请求给你,并在不包含该字段的情况下发送此请求,而不会导致你的代码崩溃。 - arboreal84hostname --fqdn
var child_process = require("child_process");
child_process.exec("hostname -f", function(err, stdout, stderr) {
var hostname = stdout.trim();
});
hostname
命令(但是你不需要带参数调用它)。 - jakub.gdns.reverse
方法。但请注意,一个IP可能有多个关联的名称。request.headers.host
你可以从request
的headers
中获取客户端的URL,其中有一个属性叫做origin
。因此:
request.headers.origin
request.headers.host
中 - 感谢! - Jesse