当服务器返回 401 响应时,请求的资源上不存在“Access-Control-Allow-Origin”标头
Posted
技术标签:
【中文标题】当服务器返回 401 响应时,请求的资源上不存在“Access-Control-Allow-Origin”标头【英文标题】:No 'Access-Control-Allow-Origin' header is present on the requested resource when 401 response is returned from the server 【发布时间】:2020-03-08 05:15:41 【问题描述】:我有一个 .NET Core 3.0 和 Angular 8 Web 应用程序。我在 Startup.cs 中启用了 CORS,它工作正常。我正在使用 JWT 身份验证以及角度侧的拦截器将 JWT 令牌附加到每个请求。当令牌有效时,对具有[Authorize]
属性的路由的调用成功。当令牌过期/无效时,服务器按预期返回 401。但是,角度拦截器无法识别 401 错误,因为控制台错误中存在 CORS 问题:
访问 XMLHttpRequest 在 'https://localhost:5001/api/Users/test' 来自原点 'http://localhost:4200' 已被 CORS 策略阻止:否 请求中存在“Access-Control-Allow-Origin”标头 资源。
在检查响应时,我可以看到响应中没有 Access-Control-Allow-Origin
标头。为什么会这样?请注意,如果令牌有效,则不会发生这种情况。
Startup.cs:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseCors(builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
app.UseEndpoints(endpoints =>
endpoints.MapControllers();
);
Angular 收到错误状态为status: 0, statusText: "Unknown Error"
。
【问题讨论】:
为什么会这样? Because CORS Why does my javascript code get a "No 'Access-Control-Allow-Origin' header is present on the requested resource" error when Postman does not?的可能重复 @Liam 我已经提到 CORS 已启用并在 JWT 令牌有效时工作。 【参考方案1】:UseCors
应放在UseAuthentication
和UseAuthorization
上方:
app.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
app.UseAuthentication();
app.UseAuthorization();
否则,当授权中间件使管道短路时,CORS 中间件将不会运行,因此不会添加 CORS 标头。这一点在 ASP.NET Core 3.0 中与 UseAuthorization
的引入略有不同,但中间件的顺序一直很重要。
【讨论】:
以上是关于当服务器返回 401 响应时,请求的资源上不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章
当 HTTP 请求返回状态 401 时,如何在 Java 中解析响应正文
对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
Angular2:http.get 返回“请求的资源上不存在‘Access-Control-Allow-Origin’标头。”
请求的资源上不存在“Access-Control-Allow-Origin”标头。或 对预检请求的响应未通过访问控制检查
AWS - 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头