Cross-Origin Read Blocking (CORB)
Cross-Origin Read Blocking (CORB)
我使用Jquery AJAX调用了第三方API。控制台中出现了以下错误:
Cross-Origin Read Blocking (CORB) blocked cross-origin response MY URL with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details.
我使用了以下代码来进行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成功方法中获得。
请帮帮我。
大多数情况下,被阻止的响应不应影响网页的行为,可以安全地忽略 CORB 错误消息。例如,当被阻止的响应体已经为空时,或者当响应将被交付到无法处理它的上下文(例如,将 HTML 文档(如 404 错误页面)交付到一个 标签)时,警告可能会出现。我不得不清除浏览器的缓存,我在这个链接中阅读到,如果请求获得空的响应,我们就会收到这个警告错误。我的请求出现了一些 CORS,所以这个请求的响应变为空了,我所要做的就是清除浏览器的缓存,CORS 就消失了。我之所以收到 CORS 是因为 Chrome 保存了缓存中的端口号,服务器只接受
localhost:3010
而我是用localhost:3002
,由于缓存造成的。
dataType:'jsonp',
您正在进行一个JSONP请求,但是服务器正在以JSON形式响应。
浏览器拒绝尝试将JSON作为JSONP处理,因为这将是一种安全隐患。(如果浏览器尝试将JSON作为JSONP处理,则最好会失败)。
有关JSONP的更多详细信息,请参见此问题。请注意,这是一种令人讨厌的解决同源策略的hack,而该策略在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权限外,您还需要处理预检。