Jak wyodrębnić nagłówki HTTP żądania z żądania przy użyciu połączenia NodeJS


265

Chciałbym uzyskać nagłówek „Host” żądania wykonanego przy użyciu pakietu biblioteki połączeń Node JS. Mój kod wygląda następująco:

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

    var host = req.???

  })
 .listen(3000);

Dokumentacja dla connect jest tutaj, ale nie widzę nic szczegółowo opisującego API reqobiektu w powyższym kodzie. http://www.senchalabs.org/connect/

Edycja : Uwaga: poprawna odpowiedź musi wskazywać na dokumentację (potrzebuję tego, aby sprawdzić, której wersji podałem API, którego szukam).

Odpowiedzi:



198

Aby wyświetlić listę nagłówków żądań HTTP, możesz użyć:

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

aby zwrócić listę w formacie 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
Uważam to za bardziej pomocne niż powyższa zaakceptowana odpowiedź. JSON.stringify robi różnicę.
Patrick,

1
Zupełnie - na powiązanej notatce, możesz również zrobić: require('util').inspect(req.headers, {depth: null}jeśli chcesz ekwiwalent tego, co dostaniesz w Node REPL. Tak czy inaczej skończysz z ciągiem.
mikermcneil

4
Dlaczego nie jest req.headersuwzględniony w oficjalnej dokumentacji Express? expressjs.com/en/api.html#req
user1063287

1
headerValue = req.headers['headerName'];
Podkreślając

1
Dokumentują tylko te właściwości, które nie są wyprowadzone. W wyżej wymienionej dokumentacji Express znajduje się uwaga: „Obiekt żądania jest ulepszoną wersją własnego obiektu żądania węzła i obsługuje wszystkie wbudowane pola i metody ”. który zawiera łącze wskazujące na dokumentację węzła obiektu bazowego.
Serge N,

141

Sprawdź wydajność console.log(req)lubconsole.log(req.headers);


11
Jak dowiedziałeś się o nagłówkach wymagań? W jakiej wersji jest dostępne to pole?
Alex Spurling

11
@AlexSpurling nodejs.org/api/http.html#http_request_headers . Connect po prostu rozszerza typy z modułu HTTP Node - http.ServerRequesti http.ServerResponse. Właściwości lub zdarzenia znalezione w dokumentacji węzła powinny być również dostępne w Connect (a przez kolejne rozszerzenia Express).
Jonathan Lonowski

1
To ma więcej sensu. Znów dobrze byłoby wiedzieć, gdzie znaleźć te informacje (że typem żądania jest tak naprawdę http.ServerRequest). Dokumentacja nie wydaje się tego wyjaśniać.
Alex Spurling

1
Typ wymagania to http.IncomingMessage
Anatoliy

Ta treść emuluje żądanie HTTP i może być dla Ciebie przydatna: gist.github.com/3879071
Anatoliy

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

Nagłówki są przechowywane w obiekcie JavaScript, przy czym ciągi nagłówków są kluczami obiektów.

Podobnie nagłówek użytkownika użytkownika można uzyskać za pomocą

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

3
UWAGA: nazwana wartość indeksu to FreakING !! wielkość liter ma znaczenie
Steve

9
Zgodnie z komentarzem @Steve o rozróżnianiu wielkości liter wszystkie nagłówki są pisane małymi literami. Więc jeśli ustawiasz nagłówek „Origin” (wielkie „O”), wówczas jedynym elementem w kolekcji nagłówków żądania będzie „origin” z małą literą „o”.
rob
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.