2016-12-29 53 views
1

如果我有這個客戶端應用程序在端口3000上運行,並且它在基於端口8080上運行的ExpressJS上構建的API中請求某些東西,我如何才能發現請求起源於localhost:3000獲取在Express中請求路由的域

我聽到一些人在使用:

req.get('host') //or origin 
req.headers.host //or origin 

origin不存在,主機返回localhost:8080,服務器端。我想要客戶的地址。

爲什麼在ExpressJS上獲取此信息非常困難? 任何人都知道我該怎麼做?

回答

1

客戶端連接只有一個IP地址。它不是「來自」一個域。您可以對IP地址進行反向查找,並查看它是否與域連接註冊。但是,大多數客戶只會報告屬於某個ISP的IP地址,而不是特定的域名。

如果您想檢查客戶端連接是否與您的服務器運行在同一臺主機上(您提到的是localhost,因此我認爲這就是您的意思),那麼您可以將客戶端IP地址與您的服務器IP進行比較地址並查看它們是否相同。您可能需要標準化本地主機可能會報告的各種方式,並且您可能需要確保一方不報告127.0.0.1而另一方報告真實IP地址。

如果您解釋了您正在嘗試解決的實際問題,那麼我們可能會以另一種方式爲您提供幫助。

+0

你好,我明白你的意思。我想創建一個黑名單和白名單來允許和拒絕我的API上的操作。我可以閱讀與req.ip的IP,然後我可以做一些比較。這個信息實際上帶有一些我不明白的數據,比如很多'f'和':' –

+0

@VictorFerreira - 這可能是一個ipV6地址。 – jfriend00