我有一些API路由,只有应用程序本身(controller.js
)才能访问。有没有办法使用IP地址(可能因为欺骗而不安全)来创建限制谁使用api的这一部分?
服务器大小(server.js)
app.get("/api/specs",function(req,res){
// Only the app should have access to it, not external entities
res.json({used:getUsed()});
});
客户端(controller.js)
$http.get('/api/specs').success(function(specs,code){
console.log(specs);
});
答案 0 :(得分:1)
默认情况下,您的浏览器不允许您发出跨站点HTTP请求,因为它是same origin policy的主题。
注意:
特别是,这意味着使用XMLHttpRequest的Web应用程序 只能向它加载的域发出HTTP请求,并且 而不是其他领域。
在您的情况下,只有api的同一域中的js才能访问它们。
如果我想将API的使用扩展到其他域,该怎么办?
在这种情况下,您必须在后端api设置Access-Control-Allow-Origin
标题。
例如:
// Cross-site HTTP requests from http://siteA.com
Access-Control-Allow-Origin: http://siteA.com
// Cross-site HTTP requests from all
Access-Control-Allow-Origin: *
如果您想调试此行为,您只需打开firebug并在网络中检入请求的标头。
<强>参考文献:强>
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy
答案 1 :(得分:0)
我认为使用GET参数是最简单的方法。
Node.js的(表达)
app.get("/api/specs",function(req,res){
var queryParam = url.parse(req.url,true).query
if(queryParam.whois == "yourUniqueName"){
res.send("okay");
}else{
res.status(404);
res.send("NG");
}
});
角
$http.get("/api/specs", {
params: { whois: "yourUniqueName" }
});
为每个API定义唯一的名称。 并且只有在客户端发送正确的名称时才设置服务器返回响应。
服务器返回404,除了您将yourUniqueName
作为查询参数whois
传递。
/api/specs?whois=yourUniqueName
okay
。
/api/specs?whois=otherName
/api/specs?otherParam=something
/api/specs
NG