跨域JSON - 服务器提供源是否重要?

时间:2017-07-10 21:40:38

标签: jquery json xmlhttprequest cors cross-domain

我找到了简单的教程如何使跨域json调用here

它工作得很好,所以我决定使用这个例子,只需更改网址:

  

var url =“http://api.myjson.com/bins/23xvb”;

var url = "http://dl.sniper.pl/test.json"

不幸的是,更改它会返回这样的错误(在chrome中):

  

XMLHttpRequest无法加载http://dl.sniper.pl/test.json。回应   预检请求未通过访问控制检查:否   请求中存在“Access-Control-Allow-Origin”标头   资源。因此,不允许原点'null'访问。

谷歌搜索该错误没有提供任何答案找到解决方案,所以这里的问题是: 为什么我会遇到这样的错误以及如何解决它?

2 个答案:

答案 0 :(得分:0)

您应该在htaccess中配置服务器todo 你需要这样的东西

<RequireAll> Require all granted </RequireAll>

答案 1 :(得分:0)

http://dl.sniper.pl/服务器必须配置为在响应http://dl.sniper.pl/test.json请求时发送Access-Control-Allow-Origin响应标头。

但由于该服务器未发送Access-Control-Allow-Origin响应标头,因此您的浏览器拒绝允许您的前端JavaScript代码访问该响应。

因此,您要么必须配置http://dl.sniper.pl/服务器以发送Access-Control-Allow-Origin,否则您可以通过CORS代理发出请求。

有一个开放的CORS代理,您可以通过将代码更改为此来请求您:

var url = "https://cors-anywhere.herokuapp.com/http://dl.sniper.pl/test.json"

通过开放的CORS代理https://cors-anywhere.herokuapp.com发送请求,该代理向其添加Access-Control-Allow-Origin响应标头,然后将其作为响应传递回您的请求前端代码。

带有Access-Control-Allow-Origin响应标头的响应是浏览器看到的,因此浏览器允许您的前端JavaScript代码实际访问响应。

您还可以使用https://github.com/Rob--W/cors-anywhere/

轻松设置自己的CORS代理

有关使用XHR或JavaScript库中的Fetch API或AJAX方法发送跨代码请求前端JavaScript代码时浏览器的行为方式的说明,请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS,以及有关必须接收哪些响应标头的详细信息。命令浏览器允许前端代码访问响应。