如果只有本地的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