如何使用NodeJS Connect从请求中提取请求HTTP标头


265

我想获取使用Node JS的连接库包进行的请求的“主机”标头。我的代码如下:

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

    var host = req.???

  })
 .listen(3000);

连接的文档在这里,但是req在上面的代码中我看不到任何详细说明对象的API的信息。http://www.senchalabs.org/connect/

编辑:注意,成功的答案必须指向文档(我需要此文件来验证哪个版本提供了我要查找的API)。

Answers:



198

要查看HTTP请求标头列表,可以使用:

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

以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
我发现这比上面接受的答案更有帮助。JSON.stringify发挥了所有作用。
Patrick

1
完全相关的注释,您也可以执行以下操作:require('util').inspect(req.headers, {depth: null}如果您希望获得与节点REPL相同的功能。无论哪种方式,您最终都会得到一个字符串。
mikermcneil

4
为什么没有req.headers包含在Express Express的官方文档中? expressjs.com/en/api.html#req
user1063287 '18

不适用于响应的Header对象(Symbol对象)-res.headers。
Codebeat

1
在这里说明明显的地方:headerValue = req.headers['headerName'];
asokan

141

检查console.log(req)或的输出console.log(req.headers);


11
您如何找到有关req.headers的信息?该字段有哪些版本?
亚历克斯·斯普林

11
@AlexSpurling nodejs.org/api/http.html#http_request_headers。Connect只是从Node的HTTP模块 - http.ServerRequest和扩展类型http.ServerResponse。Node文档中找到的属性或事件也应随Connect(以及进一步扩展为Express)一起可用。
乔纳森·洛诺夫斯基

1
这更有意义。同样,最好知道在哪里可以找到该信息(req的类型实际上是http.ServerRequest)。该文档似乎并没有明确说明。
亚历克斯·斯普林

1
请求的类型为http.IncomingMessage
Anatoliy

该要点模拟了http请求,它可能对您有用:gist.github.com/3879071
Anatoliy

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

标头存储在JavaScript对象中,标头字符串作为对象键。

同样,可以通过以下方式获取用户代理标头

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

3
注意:命名索引值为FreakING!区分大小写
Steve

9
根据@Steve的评论,区分大小写,所有标头均小写。因此,如果您设置标头“ Origin”(大写字母“ O”),则请求标头集合中的唯一元素将是带有小写字母“ o”的“ origin”。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.