跨域API调用

Cross domain API call

本文关键字:调用 API 跨域      更新时间:2023-09-26

我正在尝试用JavaScript进行跨域API调用。

我已经用JSONP尝试了angular的$http,但API服务器不支持JSONP,只支持json。使用JSONP,我得到一个"意外的令牌"错误。Fiddler显示请求成功并获得正确的json对象。有没有办法绕过错误,获得fiddler得到的东西?

作为一种替代方案,我尝试了使用XMLHttpRequest的CORS,如下所述。请求失败,通常显示"请求的资源上不存在"Access Control Allow Origin"标头。"。然而,Fiddler显示请求是成功的,返回代码为200。

我一点也不明白。为什么fiddler说返回代码是200,但CORS调用失败了?

此外,我可以在浏览器(firefox和chrome)中访问API url,而不会出现问题。API是公开的,不需要授权。

我一点也不明白。为什么fiddler说返回代码是200,但CORS调用失败了?

因为是浏览器强制执行SOP。所以你提出请求,服务器发回响应,浏览器查看响应并说:"不,我不允许给这个代码这个响应。"

如果另一端不支持来自您的源的CORS请求,并且他们不支持JSONP,则您必须通过代理:例如,如果您的解决方案有服务器,则将您的请求发送到服务器,并让您的服务器从远程API请求数据,然后将其发送回您。

此外,我可以在浏览器(firefox和chrome)中访问API url,而不会出现问题。

这是因为当您在地址栏中输入地址时,您不会发出ajax请求,SOP也不适用。

API是公开的,不需要授权。

联系他们,询问他们是否支持CORS或JSONP,您只是在启用它的文档中遗漏了一些内容。但请注意,有几个公共API可能是公开的,但不支持CORS和JSONP。它们可能用于桌面或服务器,而不是ajax。