Come estrarre le intestazioni HTTP richieste da una richiesta utilizzando NodeJS connect


265

Vorrei ottenere l'intestazione "Host" di una richiesta effettuata utilizzando il bundle di librerie connect di Node JS. Il mio codice è simile a:

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

    var host = req.???

  })
 .listen(3000);

La documentazione per la connessione è qui ma non vedo nulla che dettaglia l'API reqdell'oggetto nel codice sopra. http://www.senchalabs.org/connect/

Modifica : nota che una risposta corretta deve puntare alla documentazione (ne ho bisogno per verificare quale versione ha fornito l'API che sto cercando).

Risposte:



199

Per visualizzare un elenco di intestazioni di richiesta HTTP, è possibile utilizzare:

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

per restituire un elenco in formato 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
Ho trovato questo più utile della risposta accettata sopra. JSON.stringify fa la differenza.
Patrick,

1
Totalmente, su una nota correlata, puoi anche fare: require('util').inspect(req.headers, {depth: null}se vuoi l'equivalente di ciò che otterrai nel REPL del nodo. Ad ogni modo finisci con una stringa.
mikermcneil,

4
Perché non è req.headersincluso nella documentazione ufficiale di Express? expressjs.com/en/api.html#req
user1063287

1
Dichiarando qui l'ovvio:headerValue = req.headers['headerName'];
asokan,

1
Documentano solo quelle proprietà che non sono derivate. C'è una nota nella documentazione Express menzionata sopra: "L'oggetto req è una versione avanzata dell'oggetto richiesta del Nodo e supporta tutti i campi e i metodi incorporati ". che contiene un collegamento che punta alla documentazione del nodo dell'oggetto sottostante.
Serge N,

141

Controllare l'output di console.log(req)oconsole.log(req.headers);


11
Come sei venuto a conoscenza di req.headers? In quale versione è disponibile questo campo?
Alex Spurling,

11
@AlexSpurling nodejs.org/api/http.html#http_request_headers . Connect estende solo i tipi dal modulo HTTP del nodo - http.ServerRequeste http.ServerResponse. Le proprietà o gli eventi trovati nella documentazione di Node dovrebbero essere disponibili anche con Connect (e, per ulteriore estensione, Express).
Jonathan Lonowski il

1
Questo ha più senso. Ancora una volta, sarebbe bene sapere dove trovare tali informazioni (che il tipo di req è in realtà http.ServerRequest). La documentazione non sembra chiarire ciò.
Alex Spurling,

1
Il tipo di richiesta è http.IncomingMessage
Anatoliy,

Questa sintesi emula la richiesta http e può essere utile per te: gist.github.com/3879071
Anatoliy

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

Le intestazioni sono memorizzate in un oggetto JavaScript, con le stringhe di intestazione come chiavi dell'oggetto.

Allo stesso modo, è possibile ottenere l'intestazione user-agent con

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

3
NOTA: il valore dell'indice denominato è FreakING !! caso sensibile
Steve

9
Secondo il commento di @Steve sul fatto che sia case sensitive tutte le intestazioni sono in minuscolo. Quindi, se si imposta l'intestazione "Origine" (maiuscola 'O'), l'unico elemento nella raccolta delle intestazioni della richiesta sarà "origine" con una "o" minuscola.
rapina il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.