修改说明:这个问题是关于为什么XMLHttpRequest/fetch等。在浏览器上,Postman不受相同访问策略限制(您会收到提到CORB或CORS的错误)。这个问题不是关于如何修复“No‘Access Control Allow Origin’…”错误。这是关于它们发生的原因。

请停止发布:阳光下每种语言/框架的CORS配置。而是找到相关语言/框架的问题。允许请求绕过CORS的第三方服务用于关闭各种浏览器的CORS的命令行选项


我试图通过连接RESTful API内置Flask来使用JavaScript进行授权。但是,当我发出请求时,我会收到以下错误:

XMLHttpRequest cannot load http://myApiUrl/login. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'null' is therefore not allowed access.

我知道API或远程资源必须设置标头,但当我通过Chrome扩展Postman发出请求时,为什么它会起作用?

这是请求代码:

$.ajax({
      type: 'POST',
      dataType: 'text',
      url: api,
      username: 'user',
      password: 'pass',
      crossDomain: true,
      xhrFields: {
        withCredentials: true,
      },
    })
      .done(function (data) {
        console.log('done');
      })
      .fail(function (xhr, textStatus, errorThrown) {
        alert(xhr.responseText);
        alert(textStatus);
      });

当前回答

通过在全球范围内应用此中间件,它对我很有用:

<?php

    namespace App\Http\Middleware;

    use Closure;

    class Cors {
       public function handle($request, Closure $next) {
           return $next($request)
                   ->header('Access-Control-Allow-Origin', '*')
                   ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
                   ->header('Access-Control-Allow-Headers', "Accept,authorization,Authorization, Content-Type");
       }
    }

其他回答

如果网关超时太短,并且正在访问的资源的处理时间比超时时间长,则也可能会出现此错误。这可能是复杂数据库查询等的情况。因此,上述错误代码可以掩盖这个问题。只需检查错误代码是否为504,而不是Kamil的答案中的404或其他内容。如果是504,那么增加网关超时可能会解决问题。

在我的情况下,可以通过禁用Internet Explorer浏览器中的同源策略(CORS)来删除CORS错误,请参阅如何禁用同源策略Internet Explorer。这样做之后,日志中出现了纯504错误。

因为$.ajax({type:“POST”-调用OPTIONS$.post(-调用post

两者都不同。邮递员正确地调用“POST”,但当我们调用它时,它将是“OPTIONS”。

对于C#web服务-web API

请在web.config文件的<system.webServer>标记下添加以下代码。这将起作用:

<httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
    </customHeaders>
</httpProtocol>

请确保您在Ajax调用中没有犯任何错误。

jQuery

$.ajax({
    url: 'http://mysite.microsoft.sample.xyz.com/api/mycall',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    type: "POST", /* or type:"GET" or type:"PUT" */
    dataType: "json",
    data: {
    },
    success: function (result) {
        console.log(result);
    },
    error: function () {
        console.log("error");
    }
});

注意:如果您正在从第三方网站下载内容,那么这对您没有帮助。您可以尝试以下代码,但不能尝试JavaScript。

System.Net.WebClient wc = new System.Net.WebClient();
string str = wc.DownloadString("http://mysite.microsoft.sample.xyz.com/api/mycall");

出于浏览器测试目的:

Windows-运行:

chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security

上面的命令将禁用chrome web安全性。因此,例如,如果您正在处理本地项目,并且在尝试发出请求时遇到CORS策略问题,则可以使用上述命令跳过此类错误。基本上,它将打开一个新的铬会话。

您的IP地址未列入白名单,因此您会收到此错误。要求后端人员将您正在访问的服务的IP地址列入白名单。

访问控制允许标头

应用CORS限制是由服务器定义并由浏览器实现的安全功能。

浏览器查看服务器的CORS策略并尊重它。

然而,Postman工具并不关心服务器的CORS策略。

这就是为什么CORS错误出现在浏览器中,而不是Postman中。