我正在Angular JS中构建一个应用程序,并使用$http
方法向以JSON格式返回数据的公共外部API发出请求。
在今天之前,我对同源策略了解不多,所以我尝试使用一个简单的$http.get
请求,但显然被阻止了。
我看到规避这种情况的方法之一是使用JSONP,但远程服务器没有为此进行配置。
我很困惑,因为我觉得我有一个相当标准的用例(需要从我自己的服务器上无法管理的API获取JSON),但我能找到的唯一解决方案似乎是更改从接收响应的服务器发送的HTTP头我对这个公共API没有任何控制权所以这与我无关。
编辑:我看过一些关于这种情况下的解决方案的文章,在我控制的后端安装一个代理并通过它发送请求,但我有点不确定是否能安全地实现这一点,我能找到的唯一例子都是至少4年前的。。。有人能为我指出一个安全的易于实现的PHP代理的正确方向吗?
编辑2:我有一个标准的LAMP设置。
如果使用Apache(来自示例):
ProxyPass /api http://8.8.8.8:4000 connectiontimeout=5 timeout=30
如果您使用nginx,则该示例(在您的服务器上):
location /api {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://api;
proxy_redirect off;
}
并且在"服务器{"之前的某个位置:
upstream api {
server 8.8.8.8:4000;
}
您的请求将在外部服务器上代理。
$http.get('/api/posts/').success(function(response) {
alert(response);
});