猿问

跨源读取阻塞(CORB)

我使用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成功方法。


请帮帮我。


萧十郎
浏览 7737回答 3
3回答

梵蒂冈之花

 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权限之外,您还需要处理飞行前的问题。
随时随地看视频慕课网APP
我要回答