7

NodeJSからクライアントIPアドレスを取得することについて、チュートリアル、記事、stackoverflowの質問をたくさん見ました。ほとんどすべてがこれを使用していますrequest.header('x-forwarded-for') 。MyNodeJS 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' }

ホストの値はチェックする価値があるようでした。ローカルホストで実行中のノードは明らかに戻り127.0.0.1:8000ましたが、同じネットワーク上のネットブックから192.168.0.13(ノードが実行されているデスクトップIP)をポイントしてnode.jsサイトにアクセスしようとすると、が取得され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が私に存在しないのですか?

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 に答える