asp.net-core - Chrome从http调用https时抛出CORS错误,并且ASP Core不发送CORS header

标签 asp.net-core cors

即使请求位于同一域中但使用不同协议(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.comhttp://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/

相关文章:

nuget - ASP.NET 5 - 动态引用 NuGet 包

c# - 使用 IOptions 注入(inject)问题初始化类

javascript - 使用 jQuery Ajax 和 PHP 进行 CORS 请求

javascript - 在 OPTIONS 响应后使获取 API 与 CORS 一起工作

azure - 使用 Azure.Storage.Blobs 设置 CORS 规则

c# - 如何在 Asp.net Core 运行时从 DependencyInjection 解析泛型类型服务

asp.net-core - 在 ASP.NET Core Controller 中使用全局变量

c# - 如何正确返回对象属性的子集

javascript - Web API Controller 不尊重 CORS 来源

javascript - React Fetch Google Cloud Function http cors req.method 选项,POST