我看到了很多关于从NodeJS获取客户端IP地址的教程、文章和堆栈溢出问题。几乎所有人都使用这个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' }主机的价值似乎是值得一查的。在本地主机上运行node显然会返回127.0.0.1:8000,但随后我尝试从同一网络上的上网本访问我的node.js站点,指向192.168.0.13 (运行node的台式机IP ),我得到了192.168.0.13:8000。所以不是给我客户端的IP地址,而是我用来指向应用程序的IP地址。
然后我尝试了request.connection.remoteAddress,因为它是根据我找到的教程命名的。从本地主机运行给127.0.0.1,从我的上网本192.168.0.12运行。所以它成功了!192.168.0.12是我的上网本IP。但在教程和问题中,我发现他们说正确的方式是第一个,这取决于代理是不是你的。
那么,什么才是正确的方法呢?为什么request.header对我来说不存在?
发布于 2012-09-24 06:03:22
如果你使用的是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');
// => undefinedhttp://expressjs.com/api.html#req.get
如果您使用的是普通节点,请使用以下命令:
request.headershttps://stackoverflow.com/questions/12556588
复制相似问题