尝试从 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 错误
尝试从 Github API + Spring Boot 获取到 Angular 时出现 CORS 错误
尝试获取资源时出现 Blazor WASM NetworkError。 “CORS 缺少允许来源”