109

我正在使用 express.js,我需要知道发起呼叫的域。这是简单的代码

app.get(
    '/verify_license_key.json',
    function( req, res ) {
        // do something

我如何从对象reqres对象中获取域?我的意思是我需要知道该 api 是由 somesite.com 还是 someothersite.com 调用的。我试着做一个console.dir,reqres我从那里不知道,也阅读了文档,但它没有给我任何帮助。

4

4 回答 4

180

您必须从HOSTheader中检索它。

var host = req.get('host');

它在 HTTP 1.0 中是可选的,但在 1.1 中是必需的。而且,应用程序总是可以强加自己的要求。


如果这是为了支持跨域请求,您将改为使用Origin标头。

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

请注意,一些跨域请求需要通过预检”请求进行验证:

req.options('/route', function (req, res) {
    var origin = req.get('origin');
    // ...
});

如果您正在寻找客户端的 IP,您可以通过以下方式检索它:

var userIP = req.socket.remoteAddress;

请注意,如果您的服务器位于代理后面,这可能会为您提供代理的 IP。能否获取用户的 IP 取决于代理传递的信息。但是,它通常也会出现在标题中。

于 2013-08-28T21:46:11.940 回答
47

代替:

var host = req.get('host');
var origin = req.get('origin');

您还可以使用:

var host = req.headers.host;
var origin = req.headers.origin;
于 2016-11-10T10:27:52.140 回答
12

在 Express 4.x 中,您可以使用req.hostname,它返回域名,不带端口。IE:

// Host: "example.com:3000"
req.hostname
// => "example.com"

请参阅:http ://expressjs.com/en/4x/api.html#req.hostname

于 2019-01-29T16:29:52.877 回答
1

req.get('host')现在已弃用,使用它会给Undefined.

利用,

    req.header('Origin');
    req.header('Host');
    // this method can be used to access other request headers like, 'Referer', 'User-Agent' etc.
于 2020-06-10T18:37:10.310 回答