如何在没有JSONP或控制外部服务器的情况下请求跨域json



我正在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);
    });

相关内容

最新更新