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

Nic*_*tti 59 javascript node.js express

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

app.get(
    '/verify_license_key.json',
    function( req, res ) {
        // do something
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*ski 100

您必须从HOST标题中检索它.

var host = req.get('host');
Run Code Online (Sandbox Code Playgroud)

它是HTTP 1.0的可选项,但1.1要求.而且,应用程序总是可以强加自己的要求.


如果这是用于支持跨源请求,则应使用Origin标头.

var origin = req.get('origin');
Run Code Online (Sandbox Code Playgroud)

请注意,某些跨源请求需要通过" 预检 "请求进行验证:

req.options('/route', function (req, res) {
    var origin = req.get('origin');
    // ...
});
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找客户端的IP,您可以使用以下命令检索:

var userIP = req.socket.remoteAddress;
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*iel 22

代替:

var host = req.get('host');
var origin = req.get('origin');
Run Code Online (Sandbox Code Playgroud)

你也可以用:

var host = req.headers.host;
var origin = req.headers.origin;
Run Code Online (Sandbox Code Playgroud)

  • 得到“未定义” (13认同)

Die*_*ero 12

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

// Host: "example.com:3000"
req.hostname
// => "example.com"
Run Code Online (Sandbox Code Playgroud)

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

  • 这将返回您正在接收请求的服务器的主机名。仅当您在同一台服务器上运行 API 和网站并且发起方和接收方是同一主机时,它才有效。 (11认同)

mol*_*bal 6

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.
Run Code Online (Sandbox Code Playgroud)


hoo*_*ogw 5

2022年,我使用express v4.17.1得到以下结果

var host = req.get('host'); // 有效,本地主机:3000

var host = req.headers.host; // 有效,本地主机:3000

var host = req.hostname; // 有效,本地主机

var origin = req.get('origin'); // 不起作用,未定义

var origin = req.headers.origin; // 不起作用,未定义

在此输入图像描述