即使请求位于同一域中但使用不同协议(protocol)的地址之间,该请求也会被视为 CORS 吗?
因为我在控制台中收到代码 401:
XMLHttpRequest cannot load
https://xxx.yyy.com/appname/css/left-pane-menu.component.min.css.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://xxx.yyy.com' is therefore not allowed access.
The response had HTTP status code 401.
一方面,asp core不会发送同源的cors header ,另一方面Chrome不会接受来自其他协议(protocol)的请求。哇。
除了从同一协议(protocol)调用资源之外,我还有什么选择。 我不能那样做。我需要始终调用 https,因为某些 Azure Enterprise 代理设置会误导我的网站,当使用 https 调用它时,会误以为它是使用 http 调用的,因此 html 中的基本 url 标记设置为 http://xxx.yyy.com/myapp Chrome 会抛出无法通过安全连接访问不安全资源的错误。
我的 Startup.cs 看起来像这样:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddMvc()
.AddJsonOptions(x =>
{
x.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseCors(c=>
c
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
);
app.UseResponseCompression();
app.UseStaticFiles(new StaticFileOptions());
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapSpaFallbackRoute("spa-fallback", new { controller = "Home", action = "Index" });
});
}
最佳答案
您需要将 CORS 设置为类似的内容,因为 https://xxx.yyy.com
和 http://xxx.yyy.com
被视为不同的起源。
其背后的原因是,不同的端口也被归类为不同的来源,http 运行在端口 80 上,https 运行在 443 端口上。
有些浏览器确实以不同的方式对待这一点,即 Internet Explorer 确实(或者过去是这样,不确定新版本是否仍然如此)将不同的端口视为相同的原始端口,而 Firefox 和 Chrome 则没有(这是正确的行为,根据符合规范)。
options.AddPolicy("YYYOrigin", policyBuilder =>
{
policyBuilder
// you need to specify both
.WithOrigins("https://xxx.yyy.com", "http://xxx.yyy.com")
.AllowAnyMethod()
.AllowAnyHeader();
});
app.UseCors("YYYOrigin");
关于asp.net-core - Chrome从http调用https时抛出CORS错误,并且ASP Core不发送CORS header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45751906/