当我的 xmlhttprequest 被 CORS 阻止时,我如何连接 api [重复]

Posted

技术标签:

【中文标题】当我的 xmlhttprequest 被 CORS 阻止时,我如何连接 api [重复]【英文标题】:How can I connect with api when my xmlhttprequest is blocked by CORS [duplicate] 【发布时间】:2019-10-04 16:07:10 【问题描述】:

我正在使用 XMLHttpRequest() 与 API 连接,并且在控制台中出现关于被 CORS 策略阻止的错误。我的网址使用 https。如何连接该 API?我需要一些 API-KEY 或类似的东西吗?

我为 chrome 安装了 Allow-Control-Allow-Origin 扩展。没用

例子:

  function UserAction() 
    var xmlhttp = new XMLHttpRequest();
 // xmlhttp.setRequestHeader('Accept', 'application/json');
    xmlhttp.withCredentials = true;
        xmlhttp.onreadystatechange = function() 
            if (this.readyState == 4 && this.status == 200) 
            var myObj = JSON.parse(this.responseText);
            document.getElementById("demo").innerhtml = myObj.high;
        
    ;
    xmlhttp.open("GET", "https://sinsmbe1.insepa.net:20106/m3api-rest/execute/CRS610MI/LstByNumber;maxrecs=100;returncols=CUNO,STAT?CUNO=10000", true);
    xmlhttp.send();
  

我有 3 条来自控制台的信息。

警告:

用于加载资源的连接 https://sinsmbe1.insepa.net:20106 使用 TLS 1.0 或 TLS 1.1,它们是 已弃用,将来将被禁用。一旦禁用,用户 将被阻止加载这些资源。服务器应该 启用 TLS 1.2 或更高版本。看 https://www.chromestatus.com/feature/5654791610957824 了解更多 信息。

错误:

访问 XMLHttpRequest 在 'https://sinsmbe1.insepa.net:20106/m3api-rest/execute/CRS610MI/LstByNumber;maxrecs=100;returncols=CUNO,STAT?CUNO=10000' CORS 策略已阻止来自原点“null”:响应 预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。

警告:

跨域读取阻塞 (CORB) 阻止了跨域响应 https://sinsmbe1.insepa.net:20106/m3api-rest/execute/CRS610MI/LstByNumber;maxrecs=100;returncols=CUNO,STAT?CUNO=10000 MIME 类型为 application/vnd.sun.wadl+xml。看 https://www.chromestatus.com/feature/5629709824032768 了解更多 详情。

【问题讨论】:

在 Firefox 中使用这个调试 addons.mozilla.org/en-US/firefox/addon/cors-everywhere 最近在 chrome 中更新了它的安全扩展不再起作用 你昨天已经问过这个问题了:***.com/questions/56165837/… "如何连接那个 API?我需要一些 API-KEY 或类似的东西?" – 除非他们允许您发出请求,否则您不能发送 API 密钥。所以没有(或者至少现在还没有)。 【参考方案1】:

您必须在 api 的开头添加这些标头:

res.header("Access-Control-Allow-Origin","*");
 res.header("Access-Control-Allow-Headers","Origin,X-Requested-With,Content-Type,Accept");

【讨论】:

var xmlhttp = new XMLHttpRequest(); xmlhttp.setRequestHeader("Access-Control-Allow-Origin","*"); xmlhttp.setRequestHeader("Access-Control-Allow-Headers","Origin,X-Requested-With,Content-Type,Accept"); 类似上面的东西? 你在哪里执行代码? @omlette — 否。API 必须在响应中添加标头。您不能授予自己的代码使用访问者浏览器访问任意网站的权限。

以上是关于当我的 xmlhttprequest 被 CORS 阻止时,我如何连接 api [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有 Angular 和 Express 的 CORS - 在 Postman 中工作,但不在浏览器中

Postman(一个电子应用程序)如何绕过 CORS?

在 React 应用中启用 CORS

CORS - 从 Postman 伪造 CORS 预检无法返回标头

当我的 xmlhttprequest 被 CORS 阻止时,我如何连接 api [重复]

使用 POSTMAN 时不会出现 CORS 问题