尝试从 Web 应用程序获取数据时出现 Cors 错误(没有“访问控制允许来源”/它没有 HTTP ok 状态。)

Posted

技术标签:

【中文标题】尝试从 Web 应用程序获取数据时出现 Cors 错误(没有“访问控制允许来源”/它没有 HTTP ok 状态。)【英文标题】:Cors Errors (No 'Access-Control-Allow-Origin' / It does not have HTTP ok status.), when trying to get data from web app 【发布时间】:2020-12-21 08:48:02 【问题描述】:

我有前端代码,它从我的 ASP.NET Web 应用程序中获取一些数据。

      $.ajax(  
        url: http://webApiURL,  
        method: "GET",
        contentType: "application/json;odata=verbose",  
        headers:  "accept": "application/json;odata=verbose" ,  
        success: function (data)   
          new WorkTimer(data, "o365cs-nav-centerAlign"); //code that display data further in html
        , 
      ); 

ASP.NET Web App 非常简单,我认为这里的代码是:

public class HPMController : ApiController

    [HttpGet]
    [ActionName("WorkTime")]
    public HttpResponseMessage GetWorkTime(string param)
    
        using (HPMEntities db = new HPMEntities())
        
            var answer = db.Database.SqlQuery<string>("HPM.dbo.someProcedure " + param).First();
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, answer);
            response.Headers.Add("Access-Control-Allow-Origin", "*");

            return response;
        
    

在我的开发计算机上一切正常,而且,只要网络应用程序托管在我的 IIS (win10) 上,它就可以在我们内部网中的其他计算机上正常工作。但是当我将网络应用程序移动到服务器(winServer2012R2)时,浏览器出现错误:

从源“http://websiteURL”访问“http://serverURL”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“访问控制允许-请求的资源上存在 Origin' 标头。

我稍微挖掘了一下,我尝试将这个添加到 web 应用程序的 web.config 中:

<configuration>
  <system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Methods" value="*"/>
            <add name="Access-Control-Allow-Origin" value="*"/>
            <add name="Access-Control-Allow-Headers" value="*"/>
        </customHeaders>
    </httpProtocol>
</configuration>

但这只会给我带来其他错误:

从源“http://websiteURL”访问“http://serverURL”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。

目前我不知道如何解决这个问题。移动到其他主机时,Web 应用程序会改变行为,这对我来说很奇怪。

【问题讨论】:

【参考方案1】:

我想出了一个解决方案。问题出在 IIS 版本上,在 winServer2012R2 上为 8.5,无法在此操作系统版本上升级。出于某种原因,代码中定义的标头在 IIS 8.5 中被忽略了,我无法弄清楚如何在 web.config 中正确定义它们,其中不被忽略。 (这是发生第二个错误的原因)我只是简单地将应用程序移动到不同的服务器(winServer2019)上,它现在可以工作了。

【讨论】:

以上是关于尝试从 Web 应用程序获取数据时出现 Cors 错误(没有“访问控制允许来源”/它没有 HTTP ok 状态。)的主要内容,如果未能解决你的问题,请参考以下文章

从 React 前端的 Zoho API 获取数据时出现 CORS 错误

从自己的域中获取 api 时出现 CORS 错误

尝试从 Github API + Spring Boot 获取到 Angular 时出现 CORS 错误

尝试获取资源时出现 Blazor WASM NetworkError。 “CORS 缺少允许来源”

向 ASP.NET Web API 发送请求时出现 CORS 错误

尝试从部分视图重定向用户时出现CORS错误