CORS 预检响应不正确/空标头

Posted

技术标签:

【中文标题】CORS 预检响应不正确/空标头【英文标题】:CORS preflight response incorrect/empty headers 【发布时间】:2017-10-08 03:32:59 【问题描述】:

我有 /api/test 的 cors 这样设置:

Allow-Origin: http://localhost:8133
Allow-Headers: X-MyHeader
Allow-Method: Get

services.AddCors(options =>

    options.AddPolicy("default", policy =>
    
        policy.WithOrigins("http://localhost:8133")
            .WithHeaders("X-MyHeader")
            .WithMethods("GET");
    );
);

app.UseCors("default");

如果我使用 axios/api/test 发送带有标题 X-MyHeader 的 get 请求,它会发送 OPTIONS 请求,例如

Access-Control-Request-Headers: x-myheader
Access-Control-Request-Method: GET
Host: localhost:8132
Origin: http://localhost:8133

我收到了回复

Access-Control-Allow-Headers: x-myheader
Access-Control-Allow-Origin: http://localhost:8133
Date: whatever
server: whatever

为什么缺少Access-Control-Allow-Method 标头?


现在,如果我添加另一个标题,例如 X-NotSupportedHeader,例如

Access-Control-Request-Headers: x-notsupportedheader
Access-Control-Request-Method: GET
Host: localhost:8132
Origin: http://localhost:8133

我的回答是

Date: whatever
server: whatever

在控制台中我们得到

XMLHttpRequest cannot load http://localhost:8132/api/test. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8133' is therefore not allowed access.

如果任何条件失败,为什么根本没有设置 Access-Control-Allow-* 标头?

【问题讨论】:

【参考方案1】:

没关系,只需阅读规范即可。

https://www.w3.org/TR/cors/#resource-preflight-requests

【讨论】:

以上是关于CORS 预检响应不正确/空标头的主要内容,如果未能解决你的问题,请参考以下文章

django-cors-headers 和 nginx 配置:预检响应缺少 CORS 标头

修复 AWS API 网关不存在的 CORS“对预检的响应 ...”标头并放大

根据 CORS 预检响应中的标头“Access-Control-Allow-Headers”,标头“内容类型”是不允许的

被 CORS 阻止:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权

响应于预检要求不经过访问控制检查(JavaScript的)

被 CORS 策略阻止:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权