7

看了很多关于从 NodeJS 获取客户端 IP 地址的教程、文章和 stackoverflow 问题。几乎所有人都使用这个request.header('x-forwarded-for')NodeJS v0.8.7没有那个 request.header 功能。

typeof request.header返回undefined

但是我有 request.headers 是一个包含一些信息的对象:

{ host: '127.0.0.1:8000',
  connection: 'keep-alive',
  accept: '*/*',
  'user-agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1',
  'accept-encoding': 'gzip,deflate,sdch',
  'accept-language': 'en-US,en;q=0.8',
  'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3' }

主机价值似乎值得一试。在 localhost 上运行 node 显然返回了127.0.0.1:8000,但后来我尝试从同一网络上的上网本访问我的 node.js 站点,指向 192.168.0.13 (我运行节点的桌面 IP),我得到了192.168.0.13:8000. 所以它没有给我客户端 IP,而是我使用哪个 IP 来指向应用程序。

然后我尝试request.connection.remoteAddress了,因为它在我找到的教程中命名。从 localhost 运行127.0.0.1,并从我的上网本运行192.168.0.12。所以它奏效了!192.168.0.12 是我的上网本 IP。但是在教程和问题中,我发现他们说正确的方法是第一个,这取决于代理是否属于您。

那么正确的方法是什么?为什么 request.header 对我不存在?

4

1 回答 1

7

如果你使用 express 3,你可以这样做:

req.ip
// => "127.0.0.1"

http://expressjs.com/api.html#req.ip

如果你想要其他标题,你可以使用这个:

req.get(field)

req.get('Content-Type');
// => "text/plain"

req.get('content-type');
// => "text/plain"

req.get('Something');
// => undefined

http://expressjs.com/api.html#req.get

如果您使用的是普通节点,请使用以下命令:

request.headers
于 2012-09-23T22:03:21.877 回答