Подтвердить что ты не робот

Как получить домен, отправляющий запрос в express.js?

Я использую express.js, и мне нужно знать домен, который вызывает вызов. Это простой код

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

Как получить домен из объекта req или res? Я имею в виду, мне нужно знать, был ли api вызван somesite.com или someothersite.com. Я попытался сделать console.dir как req, так и res, но я не получил оттуда никакого представления, также прочитал документацию, но мне не помог.

4b9b3361

Ответ 1

Вам нужно извлечь его из заголовка HOST.

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-адрес пользователя, зависит от того, какая информация прокси-сервер передает. Но, как правило, он также находится в заголовках.

Ответ 2

Вместо:

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

вы также можете использовать:

var host = req.headers.host;
var origin = req.headers.origin;

Ответ 3

В Express 4.x вы можете использовать req.hostname, которое возвращает имя домена без порта. то есть:

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

Смотрите: http://expressjs.com/en/4x/api.html#req.hostname