“访问 XMLHttpRequest 已被 CORS 策略阻止”即使我已允许所有源/标头/方法

Posted

技术标签:

【中文标题】“访问 XMLHttpRequest 已被 CORS 策略阻止”即使我已允许所有源/标头/方法【英文标题】:"Access to XMLHttpRequest has been blocked by CORS policy" even though I have allowed all origin/headers/methods 【发布时间】:2021-08-02 23:49:15 【问题描述】:

我有一个带有 .NET Core 3.1 Web API 后端的 Vue 前端 Web 应用程序。我正在尝试对我的 API 进行 POST,但出现错误:

Access to XMLHttpRequest at 'https://myserver/myapi/address/4567' (redirected from 'http://myserver/myapi/address/4567') from origin 'http://myserver' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我的网络 API 位于:https://myserver/myapi

我的 Vue Web 应用程序位于:https://myserver/mysite

在我的 .NET 的 Startup.cs 中:

private readonly string mySitePolicy = "mysite";

public void ConfigureServices(IServiceCollection services)

    services.AddCors(options =>
    
        options.AddPolicy(name: mySitePolicy,
            builder =>
            
                builder.AllowAnyOrigin()
                        .AllowAnyHeader()
                        .AllowAnyMethod();
            );
    );

    services.AddSingleton<AddressRepository>();
    services.AddSingleton<CustomerRepository>();

    services.AddControllers();

    services.Configure<IISServerOptions>(o =>
    
        o.AutomaticAuthentication = false;
    );


// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

    if (env.IsDevelopment())
    
        app.UseDeveloperExceptionPage();
    

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseCors(policyName: mySitePolicy);

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    
        endpoints.MapControllers();
    );

我已允许所有来源/标题/方法。我所有的 GET 请求都成功了,只有 POST 调用失败。是什么导致了错误?我该如何解决这个问题?

【问题讨论】:

你能发布整个配置部分吗? 嗨@Farid,确保对UseCors 的调用必须放在UseRouting 之后,UseAuthorization 之前。 @Sergey,我已经添加了整个 Configure 和 ConfigureServices 代码。 @Rena 我确实将 UseCors 放在了 UseRouting 之后。抱歉,我刚放假回来。 【参考方案1】:

... 来自“http://myserver”的来源已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

我的 Vue Web 应用程序位于:https://myserver/mysite

您认为 javascript 的来源是 https://myserver/mysite,但浏览器建议 js 的来源是 http://myserver。有两种方法,

1。更改为同源

将您的 javascript 来源从 http://myserver 更改为 https://myserver,因此前端 javascript 的来源相同。

2。在后端允许 CORS

            options.AddPolicy(name: mySitePolicy,
                              builder =>
                              
                                  builder.WithOrigins("http://myserver",
                                                      "https://myserver");
                              );

您可以通过发布标题(尤其是 Access-Control-Allow-Origin)来更新问题,以查看您的 CORS 配置是否有效。

【讨论】:

我确实允许所有来源。在我的 AddPolicy() 中,我放置了 AllowAnyOrigin(),因此调用站点无关紧要。 (至少我是这么认为的)【参考方案2】:

此 CORS 错误通常是误报。换句话说,这个问题与 CORS 完全无关——但无论如何,服务器都会返回该错误。 您需要查看服务器日志(如果没有,请启用它)并查看实际异常

【讨论】:

以上是关于“访问 XMLHttpRequest 已被 CORS 策略阻止”即使我已允许所有源/标头/方法的主要内容,如果未能解决你的问题,请参考以下文章