我使用express.js,我需要知道发起呼叫的域名。这是简单的代码
app.get(
'/verify_license_key.json',
function( req, res ) {
// do something
如何从req
或res
对象获取域名?
我的意思是我需要知道api是否被somesite.com或someothersite.com调用。
我尝试了req
和res
的console.dir,但我从那里不知道,也阅读了文档,但它没有给我任何帮助。
答案 0 :(得分:94)
您必须从HOST
header。
var host = req.get('host');
HTTP 1.0是可选的,但1.1要求。而且,应用程序总是可以强加自己的要求。
如果这是为了支持cross-origin requests,您可以使用Origin
标题。
var origin = req.get('origin');
请注意,某些跨源请求需要通过"preflight" request进行验证:
req.options('/route', function (req, res) {
var origin = req.get('origin');
// ...
});
如果您正在查找客户端的IP,可以使用以下命令检索:
var userIP = req.socket.remoteAddress;
请注意,如果您的服务器位于代理服务器后面,这可能会为您提供代理服务器的IP。是否可以获取用户的IP取决于代理传递的信息。但是,它通常也会出现在标题中。
答案 1 :(得分:20)
而不是:
In [30]:
numerical_cols = f.columns[f.columns.to_series().apply(lambda x: type(x) != str)]
str_cols = f.columns[f.columns.to_series().apply(lambda x: type(x) == str)]
f.reindex(columns=str_cols.union(numerical_cols.sort_values()))
Out[30]:
A B -2 -1 3 4 5 6 7
0 X Y NaN 1 2 NaN 3 NaN 4
0 X Z 1 NaN NaN 2 3 4 NaN
你也可以使用:
var host = req.get('host');
var origin = req.get('origin');
答案 2 :(得分:3)
在Express 4.x中,您可以使用req.hostname
,它返回没有端口的域名。即:
// Host: "example.com:3000"
req.hostname
// => "example.com"
答案 3 :(得分:0)
最近在获取“来源”请求标头时遇到了问题,然后我发现了这个问题。但是与结果非常混淆,req.get('host')
已过时,这就是为什么要提供Undefined
的原因。
使用
req.header('Origin');
req.header('Host');
// this method can be used to access other request headers like, 'Referer', 'User-Agent' etc.