Ajax 如何在没有JSONP或控制外部服务器的情况下请求跨域json
我正在用Angular JS构建一个应用程序,并使用Ajax 如何在没有JSONP或控制外部服务器的情况下请求跨域json,ajax,angularjs,Ajax,Angularjs,我正在用Angular JS构建一个应用程序,并使用$http方法向以JSON格式返回数据的公共外部API发出请求 在今天之前,我对这个问题不太了解,所以我尝试使用一个简单的$http.get请求,但显然被阻止了 我看到规避这种情况的方法之一是使用JSONP,但远程服务器没有为此进行配置 我非常困惑,因为我觉得我有一个相当标准的用例(需要从我自己的服务器上无法管理的API获取JSON),但似乎我能找到的唯一解决方案是更改接收响应的服务器发送的HTTP头我无法控制此公共API,因此这与我无关 编辑
$http
方法向以JSON格式返回数据的公共外部API发出请求
在今天之前,我对这个问题不太了解,所以我尝试使用一个简单的$http.get
请求,但显然被阻止了
我看到规避这种情况的方法之一是使用JSONP,但远程服务器没有为此进行配置
我非常困惑,因为我觉得我有一个相当标准的用例(需要从我自己的服务器上无法管理的API获取JSON),但似乎我能找到的唯一解决方案是更改接收响应的服务器发送的HTTP头我无法控制此公共API,因此这与我无关
编辑:我看过一些关于这种情况下的解决方案的文章,在我控制的后端上放置代理并通过它发送请求,但我对安全地实现这一点有点不确定,我能找到的唯一解决方案都是至少4年前的。。。有人能为我指出一个安全的易于实现的PHP代理的正确方向吗
EDIT2:我有一个标准的LAMP设置。如果您使用Apache(来自示例):
如果使用nginx,则该示例(在服务器上): 在“服务器{”之前的某个地方:
upstream api {
server 8.8.8.8:4000;
}
您的请求将在外部服务器上代理
$http.get('/api/posts/').success(function(response) {
alert(response);
});
是的,这是您从浏览器运行的唯一选项。如果您无法控制API,您可以在某个后端上开发一个代理,使您的Angular应用程序能够访问原始API。谢谢,您可以为我编辑的问题提供任何指点吗?如果您需要使用prox,请记住一件重要的事情y方法是,许多服务都有一个请求限制,可以是通过IP,也可以是通过客户id。因此,首先检查限制是什么,并可能创建一个缓存响应的代理(如果可能),可能会自己限制每位访客的请求,以及如果您达到该限制会发生什么。当然,这不是一个开放的代理。@t.niese谢谢,但我认为在这个用例中它不相关,因为我请求的是有关城市自行车租赁计划的实时数据,因此数据会经常更改,我无法推理y缓存它而不每分钟执行1000次请求好的,我更了解您建议的解决方案在我的设置中如何工作。它安全吗?它看起来比在PHP中设置更复杂的代理更简单,但我担心这种简单性是要付出代价的
upstream api {
server 8.8.8.8:4000;
}
$http.get('/api/posts/').success(function(response) {
alert(response);
});