111 votes

Comment puis-je obtenir le domaine à l'origine de la demande dans express.js ?

Je suis en train d'utiliser express.js et j'ai besoin de connaître le domaine qui est à l'origine de l'appel. Voici le code simple

app.get(
    '/verify_license_key.json',
    function( req, res ) {
        // faire quelque chose

Comment puis-je obtenir le domaine à partir de l'objet req ou res? Je veux dire que je dois savoir si l'API a été appelée par somesite.example ou someothersite.example. J'ai essayé de faire un console.dir de req et res mais je n'ai pas eu d'idée à partir de là, j'ai aussi lu la documentation mais cela ne m'a pas aidé.

186voto

Jonathan Lonowski Points 45253

Vous devez le récupérer depuis l'en-tête HÔTE.

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

C'est facultatif avec HTTP 1.0, mais nécessaire avec 1.1. De plus, l'application peut toujours imposer une exigence spécifique.


S'il s'agit de prendre en charge les requêtes entre origines, vous devriez plutôt utiliser l'en-tête Origine.

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

Notez que certaines requêtes entre origines nécessitent une validation via une requête de "pré-vol":

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

Si vous cherchez l'IP du client, vous pouvez la récupérer avec :

const userIP = req.socket.remoteAddress;

Notez que si votre serveur est derrière un proxy, cela vous donnera probablement l'IP du proxy. La possibilité d'obtenir l'IP de l'utilisateur dépend des informations transmises par le proxy. Habituellement, cela se trouvera également dans les en-têtes.

48voto

Michiel Points 987

Au lieu de :

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

vous pouvez également utiliser :

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

13voto

DiegoRBaquero Points 605

Dans Express 4.x, vous pouvez utiliser req.hostname, qui renvoie le nom de domaine, sans le port. par exemple :

// Hôte : "example.com:3000"
req.hostname
// => "example.com"

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

6voto

hoogw Points 1047

Année 2022, j'utilise express v4.17.1 pour obtenir le résultat suivant

var host = req.get('host'); // fonctionne, localhost:3000

var host = req.headers.host; // fonctionne, localhost:3000

var host = req.hostname; // fonctionne, localhost

var origin = req.get('origin'); // ne fonctionne pas, undefined

var origin = req.headers.origin; // ne fonctionne pas, undefined

entrer la description de l'image ici

4voto

molagbal Points 323

req.get('host') est maintenant obsolète, l'utiliser donnera Undefined.

Utilisez,

    req.header('Origin');
    req.header('Host');
    // cette méthode peut être utilisée pour accéder à d'autres en-têtes de requête comme, 'Referer', 'User-Agent', etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X