请求是否被视为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核心不会为同一个来源发送cors标头,另一方面Chrome不会接受来自其他协议的请求。哇。
除了从同一协议调用资源外,我有哪些选择。 我做不到。我需要始终调用https,因为某些Azure Enterprise代理设置误导我的网站认为在使用https调用它时会调用http,因此html中的基本网址标记设置为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" });
});
}
答案 0 :(得分:1)
您需要将CORS设置为类似的内容,因为https://xxx.yyy.com
和http://xxx.yyy.com
被视为不同的来源。
背后的原因是,不同的端口也被归类为不同的起源,http在端口80上运行,htt在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");