如果只有本地的Angular App将其称为控制器,则执行路由
我有一些只有应用程序本身( controller.js
)应该有权访问的API路线。 有没有办法使用IP地址(可能不安全,因为欺骗)来创build谁使用这部分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); });
默认情况下,您的浏览器不允许您制作跨站点HTTP请求,因为它们的主题策略是相同的 。
注意:
特别是,这意味着使用XMLHttpRequest的Web应用程序只能对从其加载的域发出HTTP请求,而不会向其他域发出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: *
如果你想debugging这个行为,你可以打开萤火虫,并检查您的请求的networkingnetworking。
参考文献:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy
我想使用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"); } });
angular
$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