我正在尝试与反应应用中的API(http://labs.skanetrafiken.se/api.asp)进行通信。
但是我一直被阻止
var url = 'http://www.labs.skanetrafiken.se/v2.2/neareststation.asp?x=55.720504899999995&y=13.1927948'
$.ajax({
type: "GET",
url: url,
async: true,
dataType : 'xml',
crossDomain:true,
success: function(data, status, xhr) {
console.log(data);
}
});
收到回复:
XMLHttpRequest cannot load http://www.labs.skanetrafiken.se/v2.2/neareststation.asp?latitude=55.720504899999995&longitude=13.1927948.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://stackoverflow.com' is therefore not allowed access.
然而,当我从我的终端尝试同样的请求时,就像这样
curl "http://www.labs.skanetrafiken.se/v2.2/neareststation.asp?x=55.720504899999995&y=13.1927948&R=1000"
我得到了我正在寻找的答案。我怎么能绕过这个呢?不必设置服务器的唯一目的是curl
API。
答案 0 :(得分:1)
您无法通过Javascript执行此请求,因为No 'Access-Control-Allow-Origin' header is present on the requested resource.
因此资源http://www.labs.skanetrafiken.se
不允许跨域请求。虽然此Access-Control-Allow-Origin
属性不会设置为*
或http://www.labs.skanetrafiken.se
的服务器上的其他允许域,但您无法对此进行跨域请求API。
答案 1 :(得分:1)
正如其他人所写,这是一种Web浏览器的安全机制,您不能只是按照自己的意愿制作跨域请求(这可以防止大量的XSS攻击)。 CORS可用于允许某些类型的请求,但似乎该站点不支持此。
因此,您可以要求服务提供商修复其服务,或在您的后端执行API调用,并将JSON结果发送给您的客户。
CURL之所以有效,是因为它没有像Web浏览器那样严格的安全措施。
答案 2 :(得分:0)
您需要进行CORS(跨源资源共享)请求。我想参考this文章。