Como extrair cabeçalhos http de solicitação de uma solicitação usando o NodeJS connect


265

Gostaria de obter o cabeçalho "Host" de uma solicitação feita usando o pacote de bibliotecas de conexão do Node JS. Meu código se parece com:

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

    var host = req.???

  })
 .listen(3000);

A documentação para conectar está aqui, mas não vejo nada detalhando a API do reqobjeto no código acima. http://www.senchalabs.org/connect/

Editar : observe que uma resposta bem-sucedida deve apontar para a documentação (preciso disso para verificar qual versão forneceu a API que estou procurando).

Respostas:



199

Para ver uma lista de cabeçalhos de solicitação HTTP, você pode usar:

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

para retornar uma lista no 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
Achei isso mais útil do que a resposta aceita acima. O JSON.stringify faz toda a diferença.
Patrick Patrick

1
Totalmente - em uma nota relacionada, você também pode fazer: require('util').inspect(req.headers, {depth: null}se desejar o equivalente ao que obteria no Nó REPL. De qualquer maneira, você acaba com uma string.
Mckmcneil

4
Por que não está req.headersincluído na documentação oficial do Express? expressjs.com/en/api.html#req
user1063287

1
Afirmando o óbvio aqui:headerValue = req.headers['headerName'];
asokan

1
Eles apenas documentam as propriedades que não são derivadas. Há uma observação na documentação do Express mencionada acima: "O objeto req é uma versão aprimorada do próprio objeto de solicitação do Node e suporta todos os campos e métodos internos ". que contém um link apontando para a documentação do nó do objeto subjacente.
Serge N

141

Verifique a saída console.log(req)ouconsole.log(req.headers);


11
Como você descobriu o req.headers? Em qual versão este campo está disponível?
Alex Spurling

11
@AlexSpurling nodejs.org/api/http.html#http_request_headers . O Connect apenas estende tipos do módulo HTTP do Node - http.ServerRequeste http.ServerResponse. As propriedades ou eventos encontrados na documentação do Node também devem estar disponíveis no Connect (e, por extensão adicional, Express).
Jonathan Lonowski

1
Isso faz mais sentido. Novamente, seria bom saber onde encontrar essas informações (que o tipo de req é realmente http.ServerRequest). A documentação não parece esclarecer isso.
Alex Spurling

1
Tipo de req é http.IncomingMessage
Anatoliy

Esta lista simula a solicitação http e pode ser útil para você: gist.github.com/3879071
Anatoliy

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

Os cabeçalhos são armazenados em um objeto JavaScript, com as cadeias de cabeçalho como chaves do objeto.

Da mesma forma, o cabeçalho do agente do usuário pode ser obtido com

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

3
NOTA: o valor do índice nomeado é FreakING !! caso sensível
Steve

9
De acordo com o comentário do @Steve sobre a diferenciação entre maiúsculas e minúsculas, todos os cabeçalhos são minúsculos. Portanto, se você estiver configurando o cabeçalho "Origem" (capital 'O'), o único elemento na coleção de cabeçalhos de solicitação será "origem" com uma minúscula 'o'.
rob
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.