看了很多关于从 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 对我不存在?