如何在 express.js 中获取发起请求的域?

IT技术 javascript node.js express
2021-03-07 18:32:20

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

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

我如何从reqres对象获取域我的意思是我需要知道 api 是由 somesite.com 还是 someothersite.com 调用的。我试着做两者的console.dirreqres,但我还是不知道从那里,也可以参考文档,但它给了我没有帮助。

4个回答

您必须从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取决于代理传递的信息。但是,它通常也会出现在标题中。

我有一个位于 api.time.ly 的中央 API。这个 api 由安装我们的 wordpress 插件的不同客户端网站调用。所以我们可以让church1.comsauna1.com调用我们的api。在 API 中,如果调用是从Church1.comsauna1.com发出的,我是否能够获得我看到了一个标题'user-agent': 'WordPress/3.6; http://localhost/wordpress_clean',我应该解析它吗?
2021-04-21 18:32:20
如果没有通过域,那不是问题,我显然可以将其添加到 API 调用中。
2021-04-21 18:32:20
但这不是给了我 api 的主机吗?这可能是由于我在本地执行此操作并且我将 api.time.ly 设置为解析为 127.0.0.1 而我正在拨打的电话是来自本地主机,但如果我使用它,主机是“api.time.ly”,我需要知道正在呼叫我的域。我将在实时站点上对此进行测试。
2021-05-03 18:32:20
@NicolaPeluchetti 您可以尝试拆分和解析用户代理或要求将其作为请求中的数据。但是,我想说像OAuth这样的东西更适合识别客户。
2021-05-10 18:32:20
@NicolaPeluchetti 我想我不明白您所说的“正在呼叫我的域什么意思HTTP 客户端通常不会在请求中提供他们自己的主机名。这是为了CORS吗?
2021-05-11 18:32:20

代替:

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

您还可以使用:

var host = req.headers.host;
var origin = req.headers.origin;
给我 127.0.0.1:3000
2021-04-28 18:32:20
得到 undefined
2021-05-08 18:32:20
127.0.0.1:3000 与localhost:3000我相信的相似127.0.0.1指的是本地IP地址
2021-05-16 18:32:20

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

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

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

这将返回您正在接收请求的服务器的主机名。只有当您在同一台服务器上运行您的 API 和网站并且发起方和接收方是同一台主机时,才会起作用
2021-05-19 18:32:20

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.