为了账号安全,请及时绑定邮箱和手机立即绑定

跨源读取阻塞(CORB)

跨源读取阻塞(CORB)

萧十郎 2019-09-02 11:13:03
我使用Jquery AJAX调用了第三方API。我在控制台中收到以下错误:跨源读取阻止(CORB)阻止了具有MIME类型application / json的跨源响应MY URL。有关详细信息,请参阅https://www.chromestatus.com/feature/5629709824032768。我使用以下代码进行Ajax调用:$.ajax({  type: 'GET',  url: My Url,  contentType: 'application/json',  dataType:'jsonp',  responseType:'application/json',  xhrFields: {    withCredentials: false  },  headers: {    'Access-Control-Allow-Credentials' : true,    'Access-Control-Allow-Origin':'*',    'Access-Control-Allow-Methods':'GET',    'Access-Control-Allow-Headers':'application/json',  },  success: function(data) {    console.log(data);  },  error: function(error) {    console.log("FAIL....=================");  }});当我在Fiddler中检查时,我得到的数据是响应但不是Ajax成功方法。请帮帮我。
查看完整描述

3 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

 dataType:'jsonp',

您正在发出JSONP请求,但服务器正在使用JSON进行响应。


浏览器拒绝尝试将JSON视为JSONP,因为这会带来安全风险。(如果浏览器确实试图将JSON视为JSONP,那么它最多会失败)。


有关JSONP的更多详细信息,请参阅此问题。请注意,在CORS可用之前使用的同源策略是一个讨厌的黑客。CORS是一个更清洁,更安全,更强大的解决方案。


看起来你正试图制作一个跨原始的请求,并在一大堆相互矛盾的指令中抛出你能想到的一切。


您需要了解同源策略的工作原理。


有关详细指南,请参阅此问题。


现在关于你的代码的一些注释:


contentType: 'application/json',

使用JSONP时会忽略此项

您正在提出GET请求。没有请求体来描述其类型。

这将使跨域请求变得非简单,这意味着除了基本的CORS权限之外,您还需要处理飞行前的问题。

删除它。


 dataType:'jsonp',

服务器没有响应JSONP。

删除它。(您可以使服务器使用JSONP进行响应,但CORS更好)。


responseType:'application/json',

这不是jQuery.ajax支持的选项。删除它。


xhrFields:{withCredentials:false},


这是默认值。除非您使用ajaxSetup将其设置为true,否则请将其删除。


  headers: {

    'Access-Control-Allow-Credentials' : true,

    'Access-Control-Allow-Origin':'*',

    'Access-Control-Allow-Methods':'GET',

    'Access-Control-Allow-Headers':'application/json',

  },

这些是响应标头。它们属于响应,而不是请求。

这将使跨域请求变得非简单,这意味着除了基本的CORS权限之外,您还需要处理飞行前的问题。


查看完整回答
1 反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 7641 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信