CORS 政策 - 对预检请求的响应

Posted

技术标签:

【中文标题】CORS 政策 - 对预检请求的响应【英文标题】:CORS policy - response to preflight request 【发布时间】:2021-02-18 17:23:57 【问题描述】:

我正在我的 .NET Core 3.1 Web 应用程序中设置 CORS 策略,但我收到一条错误提示

Access to XMLHttpRequest at 'http://10.10.100.60/api/api/values/getmyorders?toOrder=false&uId=8c3d745b-78b7-47ed-ac93-310fe61b8daf' from origin 'http://10.10.100.66:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我以前从未遇到过这种预检错误。 这是我的Startup 的样子

public void ConfigureServices(IServiceCollection services)
        
         //code shortened for brevity
         services.AddCors();
        

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        
            loggerFactory.AddProvider(new Log4NetProvider("log4net.config", true));
            if (env.IsDevelopment())
            
                app.UseDeveloperExceptionPage();
            
            else
            
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            

            app.UseCors(x => x
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());

            app.UseAuthentication();
            app.UseHttpsRedirection();
            app.UseMvc();
        

我还尝试使用其他 CORS 方法,例如带有命名策略和中间件的 CORS 以及默认策略,但我仍然遇到相同的预检错误。关于如何进行的任何建议?

【问题讨论】:

您是否有机会使用身份服务器 4?你有开放 id 连接的身份验证吗? 只是想一想,可能是因为app.UseHttpsRedirection(),客户端请求在http上,可能是因为app.UseHttpsRedirection(),当它到达服务器时被重定向到https。 不,我不使用身份服务器 - @nalnpir 我也想过,我删除了 app.UseHttpsRedirection() 并出现了同样的错误 - @RameshKanjinghat 【参考方案1】:

这就是几个小时后对我有用的方法。

public void ConfigureServices(IServiceCollection services)
        
            services.AddCors(options =>
            
                options.AddPolicy("AllowAllHeaders",
                builder =>
                
                    builder.AllowAnyOrigin()
                    .AllowAnyHeader()
                    .AllowAnyMethod();
                );
            );
        

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        
            app.UseCors("AllowAllHeaders");
            app.UseAuthentication();
            app.UseHttpsRedirection();
            app.UseMvc();
        

我现在只使用AllowAnyOrigin()AllowAnyHeader()AllowAnyMethod()。我认为AllowCredentials() 存在问题。希望这个答案对将来的人有所帮助。

【讨论】:

以上是关于CORS 政策 - 对预检请求的响应的主要内容,如果未能解决你的问题,请参考以下文章

从源 xxxx 访问 XMLHttpRequest ' 被 CORS 策略阻止:对预检的响应。预检请求不允许重定向

为啥 CORS 错误“对预检请求的响应未通过访问控制检查”?

CORS:对预检请求的响应未通过访问控制检查

http://localhost:4200' 已被 CORS 策略阻止:对预检请求的响应未通过

已被 CORS 策略阻止:对预检请求的响应未通过

角 POST 请求被 CORS 策略阻止:对预检请求的响应未通过访问控制检查