OpenSky-Network是一种用于飞机定位全球数据的API。很高兴与Openlayers-3一起玩......但是! (因为有一个但是!)
使用JavaScript,我试图在this URL
访问JSON数据的一些变量我真的被封锁了。可以通过Firefox中的简单导航访问它,而不是使用JavaScript。
这看起来真的很愚蠢,因为它与其他API合作,如this one,或其他类似维基百科,维基数据,Nominatim等Openlayers-3。
我真的在问自己为什么这不适用于OpenSky-Network。我唯一看到的是Firefox向我展示了一个跨域问题,但我确信有一个解决方案。
我尝试了很多技巧:
Tech1
$.getJSON( url , function(data) {
console.log(data);
});
TECH2
$.ajax({
url: url,
type: 'GET',
success: function(data) {
console.info(data);
}
});
Tech3车队
$.ajax({
url: url,
dataType: 'jsonp',
crossDomain : true,
success:function(xhr, json){
alert("Success ");
},
error:function(){
alert("Error");
}
});
Tech4
var xhr = null;
var response = null;
if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }
else { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
xhr.onreadystatechange = function() {
console.info("state changed");
if (xhr.readyState === 4) {
if (xhr.status === 200) {
response = xhr.responseText;
console.info("response="+response);
}
}
else {}
};
xhr.open("GET", url,true);
xhr.send(null);
使用所有这些和其他技术,我无法在opensky url api中获取JSON数据。我的意思是我想将它用作JavaScript变量,但我不能。
这真是令人沮丧,因为在检查器工具(Firefox中的F12键)中,我可以看到JSON对象和值。有一个“同源”政策问题,然后我没有变量。问题是什么?我真的无法理解这个“同源”政策概念,英语不是我的母语。
根据API文档的限制部分,我可以在不注册的情况下完成。
匿名是那些在不使用凭据的情况下访问API的用户。匿名用户的限制是:
匿名用户只能获取最新的状态向量,即时间参数将被忽略。
匿名用户只能检索时间结果为10秒的数据。这意味着,API将立即返回状态向量 - (现在为mod 10)
因此,我有几个问题:
我可以使用JavaScript访问OpenSky-Network API的URL中的变量吗?
为什么此特定网址存在问题?
此网址的“同源”政策有什么问题?
答案 0 :(得分:2)
我是OpenSky开发人员之一。
正如codepearlex已经提到的,OpenSky API不允许使用CORS。我们最近启用了此功能,因此您现在应该可以在浏览器和任何域中访问API。
答案 1 :(得分:0)
如上所述,同源政策(SOP)就是问题所在。
这看起来真的很愚蠢,因为它与其他API合作,如this one,或其他类似维基百科,维基数据,Nominatim等Openlayers-3。
- 仅针对此网址的“同源”政策有什么问题?
醇>
当服务器收到传入请求时,它可以检查请求标头中的Origin
字段,并允许或禁止关于SOP的请求。请注意,“disallow”并不意味着服务器拒绝数据,而是不在响应头中设置Access-Control-Allow-Origin
字段,从而导致浏览器阻止请求。为了让浏览器允许请求,响应标头中的Access-Control-Allow-Origin
字段必须等于Origin
字段或*
。
您提供的API(http://ipinfo.io/213.32.89.142/json)会返回Access-Control-Allow-Origin: *
,因此允许来自每个来源的请求。
- 为什么此特定网址存在问题?
醇>
OpenSky API在响应标头中不包含Access-Control-Allow-Origin
字段,这意味着您的浏览器会阻止请求并拒绝从服务器访问有效负载(如果发出请求的脚本是从其他来源加载的,你的服务器)。正如您在调试控制台中注意到的那样,数据存在,但您的浏览器会限制访问。
我可以使用JavaScript访问OpenSky-Network API的URL吗?
最近在GitHub上有类似的issue。交叉原始请求将很快无法提供。您必须使用您的网络服务器代理API请求。
如果您将来遇到任何有关我们服务的问题,我建议您将问题发布到OpenSky Forum。我偶然发现了这个帖子。论坛中的问题将通知所有OpenSky管理员,使我们能够尽快做出回应。