Cómo extraer los encabezados http de una solicitud utilizando NodeJS connect


265

Me gustaría obtener el encabezado "Host" de una solicitud realizada utilizando el paquete de biblioteca de conexión de Node JS. Mi código se ve así:

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

    var host = req.???

  })
 .listen(3000);

La documentación para conectar está aquí, pero no veo nada que detalle la API del reqobjeto en el código anterior. http://www.senchalabs.org/connect/

Editar : tenga en cuenta que una respuesta exitosa debe apuntar a la documentación (necesito esto para verificar qué versión proporcionó la API que estoy buscando).

Respuestas:



199

Para ver una lista de encabezados de solicitud HTTP, puede usar:

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

para devolver una lista en 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
Encontré esto más útil que la respuesta aceptada arriba. JSON.stringify hace toda la diferencia.
— Patrick

1
Totalmente, en una nota relacionada, también puede hacer: require('util').inspect(req.headers, {depth: null}si desea el equivalente de lo que obtendría en el Node REPL. De cualquier manera, terminas con una cadena.
— mikermcneil

44
¿Por qué no se req.headersincluye en la documentación oficial de Express? expressjs.com/en/api.html#req
— user1063287

1
Afirmando lo obvio aquí:headerValue = req.headers['headerName'];
— asokan

1
Solo documentan aquellas propiedades que no se derivan. Hay una nota en la documentación de Express mencionada anteriormente: "El objeto req es una versión mejorada del propio objeto de solicitud de Node y es compatible con todos los campos y métodos integrados ". que contiene un enlace que apunta a la documentación del Nodo del objeto subyacente.
— Serge N

141

Comprobar salida de console.log(req)oconsole.log(req.headers);


11
¿Cómo se enteró de req.headers? ¿En qué versión está disponible este campo?
— Alex Spurling

11
@AlexSpurling nodejs.org/api/http.html#http_request_headers . Conectar simplemente extiende tipos de nodo de HTTP módulo - http.ServerRequesty http.ServerResponse. Las propiedades o eventos que se encuentran en la documentación de Node también deberían estar disponibles con Connect (y, por extensión adicional, Express).
— Jonathan Lonowski el

1
Eso tiene más sentido. Una vez más, sería bueno saber dónde encontrar esa información (que el tipo de solicitud es realmente http.ServerRequest). La documentación no parece aclarar esto.
— Alex Spurling

1
Tipo de solicitud es http.IncomingMessage
— Anatoliy

Esta esencia emula la solicitud http y puede ser útil para usted: gist.github.com/3879071
— Anatoliy

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

Los encabezados se almacenan en un objeto JavaScript, con las cadenas de encabezado como claves de objeto.

Del mismo modo, el encabezado de agente de usuario se puede obtener con

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

3
NOTA: ¡el valor del índice nombrado es FreakING! caso sensible
— Steve

9
Según el comentario de @Steve sobre que distingue entre mayúsculas y minúsculas, todos los encabezados están en minúsculas. Entonces, si está configurando el encabezado "Origen" ('O' mayúscula), entonces el único elemento en la colección de encabezados de solicitud será "origen" con una 'o' minúscula.
— robar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.