反应对 XMLHttpRequest 的访问已被 CORS 策略阻止 请求的资源上不存在“Access-Control-Allow-Origin”标头

Posted

技术标签:

【中文标题】反应对 XMLHttpRequest 的访问已被 CORS 策略阻止 请求的资源上不存在“Access-Control-Allow-Origin”标头【英文标题】:react Access to XMLHttpRequest has been blocked by CORS policy No 'Access-Control-Allow-Origin' header is present on the requested resource 【发布时间】:2020-06-24 14:51:08 【问题描述】:

我正在尝试从 api 访问数据,但出现此错误

从源“http://localhost:3000”访问“http://example.com/api/login”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“访问控制允许源” ' 请求的资源上存在标头。

这是我的代码

return axios.post('http://example.com/api/login',  username: username, password: password ).then(response => 
        console.log('response', response);

        if (response.status === 400 || response.status === 500)
            throw response.data;
        return response.data;
    ).catch(err => 
        console.log('err', err);

        throw err[1];
    );

使用 asp.net 构建的后端

谢谢

【问题讨论】:

【参考方案1】:

此问题与您的服务器有关。您的服务器不允许来自不同域的请求。在您的情况下,http://example.com/api/loginhttp://localhost:3000 位于不同的域中。您可以在您的 asp.net 代码中允许任何您想要的域。以下代码可能对您有用:

public class Startup

    public Startup(IConfiguration configuration)
    
        Configuration = configuration;
    

    readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

    public IConfiguration Configuration  get; 

    public void ConfigureServices(IServiceCollection services)
    
        services.AddCors(options =>
        
            options.AddPolicy(MyAllowSpecificOrigins,
            builder =>
            
                builder.WithOrigins("http://example.com",
                                    "http://www.contoso.com");
            );
        );

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    
        if (env.IsDevelopment())
        
            app.UseDeveloperExceptionPage();
        
        else
        
            app.UseHsts();
        

        app.UseCors(MyAllowSpecificOrigins); 

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

更多信息,您可以导航here

【讨论】:

感谢您的关注.. 我发现这个 chrome 扩展解决了问题chrome.google.com/webstore/detail/allow-cors-access-control/… 您可以将其仅用于临时用途。当您将代码部署到服务器时,您的客户端将遇到相同的错误。您必须在您的服务器中解决此问题。【参考方案2】:

经过几个小时的搜索,我找到了解决问题的这个 chrome 扩展 https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf

【讨论】:

以上是关于反应对 XMLHttpRequest 的访问已被 CORS 策略阻止 请求的资源上不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

AngularJs——对 XMLHttpRequest 的访问已被 CORS 策略阻止 [重复]

套接字 IO 错误“对 XMLHttpRequest 的访问已被 CORS 策略阻止”

反应 django 权限

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

访问 XMLHttpRequest 时访问 XMLHttpRequest 已被 CORS 策略阻止

CORS 策略已阻止对 XMLHttpRequest 的访问