CORS 政策已被阻止我的子域

Posted

技术标签:

【中文标题】CORS 政策已被阻止我的子域【英文标题】:CORS Policy has been blocked my subdomain 【发布时间】:2019-12-19 08:33:50 【问题描述】:

我有一个相同的域,其中之一是没有前缀 www 的域。例如,

    https://www.example.com https://example.com

第一个域工作正常,因为它是默认域。但是当我执行 CRUD 或访问任何 api 服务时,第二个出现错误。

访问 XMLHttpRequest 在 'https://www.example.com/hubCon/negotiate' 来自原点 “https://example.com”已被 CORS 策略阻止:响应 预检请求未通过访问控制检查: 响应中的“Access-Control-Allow-Origin”标头不能是 当请求的凭据模式为“包含”时,通配符“*”。这 XMLHttpRequest 发起的请求的凭证模式是 由 withCredentials 属性控制。

我试了published by Microsoft文章中的代码,还是不行。

我使用的是 .Net Core 2.2 版本。 这是我的 Startup.cs

    public void ConfigureServices(IServiceCollection services)
    
        services.AddCors(options =>
        
            options.AddPolicy(MyAllowSpecificOrigins,
            builder =>
            
                builder.WithOrigins("https://example.com")
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowAnyOrigin()
                .AllowCredentials();
            );
        );

        services.AddMvc().AddJsonOptions(options =>
        
            options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        ).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);


        services.AddSignalR();
    
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    
        if (env.IsDevelopment())
        
            app.UseDeveloperExceptionPage();
        
        else
        
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        

        app.UseCors(MyAllowSpecificOrigins);
        app.UseForwardedHeaders(new ForwardedHeadersOptions
        
            ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
        );

        app.UseHttpsRedirection();
        app.UseStatusCodePages();
        app.UseStaticFiles();
        app.UseAuthentication();


        app.UseSignalR(routes =>
        
            routes.MapHub<HubSignal>("/hubCon");
        );

        app.UseMvc(routes =>
        
            routes.MapRoute(
                name: "default",
                template: "controller=Home/action=Index/id?"
                );
        );
    

所以,我不明白为什么项目会出错。

感谢您的回答。

【问题讨论】:

【参考方案1】:

发生这种情况是因为您同时指定了两者:

AllowAnyOrigin() AllowCredentials();

不支持此配置。见doc:

指定 AllowAnyOrigin 和 AllowCredentials 是不安全的配置,可能导​​致跨站点请求伪造。当应用同时配置了这两种方法时,CORS 服务会返回无效的 CORS 响应。

您应该删除对 AllowAnyOrigin 方法的调用

【讨论】:

【参考方案2】:

您不能将 AllowAnyOrigin 与 AllowCredentials 一起使用。下面是一个允许使用 CORS 的通配符域的示例。

此代码在 ConfigureServices 中:

services.AddCors(options =>
        
            options.AddPolicy("_AllowOrigin",
                builder => builder
                    .SetIsOriginAllowedToAllowWildcardSubdomains()
                    .WithOrigins("https://localhost:44385", "https://*.azurewebsites.net", "http://*.azurewebsites.net")
                    .AllowAnyHeader()
                    .AllowAnyMethod()
                    .AllowCredentials()
                );
        );

别忘了在你的控制器中装饰你的动作:

    [EnableCors("_AllowOrigin")]

【讨论】:

从源 'example.com' 访问 XMLHttpRequest 在 'example.com/hubCon/negotiate' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否 'Access-Control-Allow -Origin' 标头存在于请求的资源上。 谢谢,我解决了这个问题。你能为这个问题投票吗?有人给了我负分。谢谢。

以上是关于CORS 政策已被阻止我的子域的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“评估已被 CORS 政策阻止:反应中没有“访问控制允许来源”

Google OAuth2:重定向已被 CORS 政策阻止:请求需要预检,不允许遵循跨域重定向

被 CORS 政策阻止并没有解决! Laravel + Vuejs

我的网页的一项功能已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头

为啥我的 formdata POST 没有被 Cors 政策阻止?

CORS 政策已阻止从我的 api 访问 XMLHttpRequest [重复]