¿Cómo obtengo el dominio que origina la solicitud en express.js?

84

Estoy usando express.js y necesito saber el dominio que origina la llamada. Este es el código simple

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

¿Cómo obtengo el dominio del objeto reqo res? Quiero decir, necesito saber si la API fue llamada por somesite.com o someothersite.com. Intenté hacer un console.dir de ambos reqy, respero no tengo idea de allí, también leí la documentación pero no me ayudó.

Nicola Peluchetti
fuente
1
prueba: req.hosto req.get('host') expresa documentos
dc5
2
node.js: req.headers["x-forwarded-for"] || req.connection.remoteAddress x- fordered -for cubriría sus bases detrás de un proxy, balanceador de carga ...
Eat at Joes
Recibo esta advertencia: express req.host obsoleto: use req.hostname en lugar de index.js: 20: 8
Adam F

Respuestas:

142

Tienes que recuperarlo del HOSTencabezado .

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

Es opcional con HTTP 1.0, pero requerido por 1.1. Y la aplicación siempre puede imponer un requisito propio.


Si esto es para admitir solicitudes de origen cruzado , en su lugar, usaría el Originencabezado.

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

Tenga en cuenta que algunas solicitudes de origen cruzado requieren validación a través de una solicitud de " verificación previa" :

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

Si está buscando la IP del cliente, puede recuperarla con:

var userIP = req.socket.remoteAddress;

Tenga en cuenta que, si su servidor está detrás de un proxy, esto probablemente le dará la IP del proxy. La posibilidad de obtener la IP del usuario depende de la información que transmita el proxy. Pero normalmente también estará en los encabezados.

Jonathan Lonowski
fuente
1
¿Pero esto no me da el host de la API? Podría ser causado por el hecho de que estoy haciendo esto localmente y tengo api.time.ly configurado para resolver en 127.0.0.1 y la llamada que estoy haciendo es de localhost, pero si lo uso, el host es "api.time.ly". Necesito saber el dominio que me llama. Probaré esto en un sitio en vivo.
Nicola Peluchetti
1
@NicolaPeluchetti Supongo que no entiendo lo que quieres decir con " el dominio que me llama" . Los clientes HTTP no suelen proporcionar su propio nombre de host en la solicitud. ¿Es esto para CORS ?
Jonathan Lonowski
Tengo una API central que se encuentra en api.time.ly. Esta API es llamada por diferentes sitios web de clientes que instalan nuestro complemento de wordpress. Entonces podríamos hacer que church1.com y sauna1.com hagan llamadas a nuestra API. En la API, ¿podría obtener si la llamada se realizara desde church1.com o desde sauna1.com ? vi un encabezado, ¿ 'user-agent': 'WordPress/3.6; http://localhost/wordpress_clean'debo analizarlo?
Nicola Peluchetti
Si no se pasa el dominio, no es un problema, obviamente puedo agregarlo a la llamada API.
Nicola Peluchetti
@NicolaPeluchetti Puede intentar dividir y analizar el agente de usuario o solicitarlo como datos en la solicitud. Pero diría que algo como OAuth sería más adecuado para identificar clientes.
Jonathan Lonowski
38

En vez de:

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

también puedes usar:

var host = req.headers.host;
var origin = req.headers.origin;
Michiel
fuente
8
recibiendoundefined
Himanshu Bansal
me da 127.0.0.1:3000
user1709076
8

En Express 4.x puede usar req.hostname, que devuelve el nombre de dominio, sin puerto. es decir:

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

Ver: http://expressjs.com/en/4x/api.html#req.hostname

DiegoRBaquero
fuente
8
Esto devuelve el nombre de host del servidor en el que está recibiendo la solicitud. Solo funcionará si está ejecutando su API y su sitio web en el mismo servidor y la parte de origen y de recepción es el mismo host.
Paul T. Rawkeen
0

Recientemente enfrenté un problema al obtener el encabezado de solicitud 'Origen', luego encontré esta pregunta. Pero bastante confundido con los resultados, req.get('host')está en desuso, por eso dar Undefined. Utilizar,

    req.header('Origin');
    req.header('Host');
    // this method can be used to access other request headers like, 'Referer', 'User-Agent' etc.
molagbal
fuente