Comment extraire les en-têtes http de demande d'une demande à l'aide de NodeJS connect


265

Je souhaite obtenir l'en-tête "Host" d'une demande effectuée à l'aide du bundle de bibliothèques de connexion de Node JS. Mon code ressemble à:

var app = connect()
  .use(connect.logger('dev'))
  .use(connect.static('public'))
  .use(function(req, res){

    var host = req.???

  })
 .listen(3000);

La documentation de connect est ici mais je ne vois rien qui détaille l'API de l' reqobjet dans le code ci-dessus. http://www.senchalabs.org/connect/

Edit : Notez qu'une réponse réussie doit pointer vers la documentation (j'en ai besoin pour vérifier quelle version a fourni l'API que je recherche).

Réponses:



199

Pour voir une liste des en-têtes de requête HTTP, vous pouvez utiliser:

console.log(JSON.stringify(req.headers));

pour renvoyer une liste au format JSON.

{
"host":"localhost:8081",
"connection":"keep-alive",
"cache-control":"max-age=0",
"accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"upgrade-insecure-requests":"1",
"user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36",
"accept-encoding":"gzip, deflate, sdch",
"accept-language":"en-US,en;q=0.8,et;q=0.6"
}

2
J'ai trouvé cela plus utile que la réponse acceptée ci-dessus. Le JSON.stringify fait toute la différence.
— Patrick

1
Totalement - sur une note connexe, vous pouvez également le faire: require('util').inspect(req.headers, {depth: null}si vous voulez l'équivalent de ce que vous obtiendriez dans le Node REPL. Quoi qu'il en soit, vous vous retrouvez avec une chaîne.
— mikermcneil

4
Pourquoi n'est-il pas req.headersinclus dans la documentation officielle d'Express? expressjs.com/en/api.html#req
— user1063287

1
Énoncer l'évidence ici:headerValue = req.headers['headerName'];
— asokan

1
Ils documentent simplement les propriétés qui ne sont pas dérivées. Il existe une note dans la documentation Express mentionnée ci-dessus: "L'objet req est une version améliorée du propre objet de requête de Node et prend en charge tous les champs et méthodes intégrés ." qui contient un lien pointant vers la documentation Node de l'objet sous-jacent.
— Serge N

141

Vérifier la sortie de console.log(req)ouconsole.log(req.headers);


11
Comment avez-vous découvert les en-têtes de demande? Dans quelle version ce champ est-il disponible?
— Alex Spurling

11
@AlexSpurling nodejs.org/api/http.html#http_request_headers . Connect étend simplement les types du module HTTP de Node - http.ServerRequestet http.ServerResponse. Les propriétés ou événements trouvés dans la documentation de Node devraient également être disponibles avec Connect (et, par extension supplémentaire, Express).
— Jonathan Lonowski

1
Cela a plus de sens. Encore une fois, il serait bon de savoir où trouver ces informations (que le type de demande est en fait http.ServerRequest). La documentation ne semble pas le clarifier.
— Alex Spurling

1
Le type de demande est http.IncomingMessage
— Anatoliy

Ce gist émule la requête http et il peut vous être utile: gist.github.com/3879071
— Anatoliy

56
var host = req.headers['host']; 

Les en-têtes sont stockés dans un objet JavaScript, avec les chaînes d'en-tête comme clés d'objet.

De même, l'en-tête user-agent peut être obtenu avec

var userAgent = req.headers['user-agent']; 

3
REMARQUE: la valeur d'index nommée est FreakING !! respect de la casse
— Steve

9
Selon le commentaire de @Steve sur la sensibilité à la casse, tous les en-têtes sont en minuscules. Donc, si vous définissez l'en-tête «Origin» («O» majuscule), le seul élément de la collection d'en-têtes de demande sera «origin» avec un «o» en minuscule.
— voler
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.