API出现跨域问题-跨域读取阻止(CORB)

时间:2019-01-28 14:21:58

标签: javascript ajax rest api get

我正在尝试使用API​​根据用户ID获取有关特定用户的信息。我需要使用基本身份验证,并在调用中传递一些标头。 我得到这个:

Cross-Origin Read Blocking (CORB) blocked cross-origin response  "rest/user/getProfile?callback=jQuery224033348109431646855_1548684613983&userId=24068..." with MIME type text/plain.

我的代码:

$.ajax
  ({
    type: 'GET',
    crossDomain: true,
    async: false,
    url: 'example_URL_/api/user/getProfile',
    headers: {
      "Accept": "application/json",
      "Content-Type": "application/json",
    },
    beforeSend: function (xhr) { xhr.setRequestHeader("Authorization", "Basic ZHVubmVzYXBpskjoi43u5409543o9tI654kjhugjy"); },
    dataType: 'jsonp',
    data: { "Id": "1234" },
    success: function (data) {
      console.log(data);
    },
    error: function (xhr, status, error) {
      console.log(xhr);
      console.log(status);
      console.log(error);
    }
  });

我有什么想念的吗?

2 个答案:

答案 0 :(得分:1)

在您的api中,将CORS配置为接受所有域,或输入您的域(用于发送请求的域)

如果您的API是由PHP创建的,那么这是一个示例

<?php
 header("Access-Control-Allow-Origin: *");

如果您使用的是第三方api,请尝试查看文档,我确定其中有一部分涉及CORS。

答案 1 :(得分:0)

您说:

dataType: 'jsonp',

…因此jQuery发出了JSONP请求(即,插入了<script>元素)。

浏览器向URL发出请求,服务器说:

Content-Type: text/plain

由于纯文本文档不是JavaScript程序,因此浏览器拒绝执行该文档,而是引发了CORB错误。

JSONP响应必须为application/javascript,而不是text/plain

您需要:

  • 不请求JSONP
  • 更改服务器以使用JSONP响应

此外:由于您使用的是JSONP,因此typecrossDomainasyncheadersxhr.setRequestHeader属性无效。

由于您说过需要设置基本身份验证,因此排除了选项二。您不能为此使用JSONP。