reactjs - React 开发:在 fetch 中添加 headers 属性会引发 CORS 错误
问题描述
以下错误来自 Firefox 的网络部分:
我已经尝试通过在发送 React API 请求(或本机 ES6 请求)时headers
在本机函数中添加一个(基于类似问题的各种答案)属性来解决上述错误。fetch
fetch('API_ENDPOINT', // API_ENDPOINT is a different sub-domain
{
method: 'POST',
headers: {
'Authorization' : 'Basic XXXXXXXXXX'
},
body: JSON.stringify(body)
}
).then(...);
删除该headers
部分允许请求通过(我已通过在响应中返回自定义消息来验证这一点header
)但我需要添加授权标头,因为我通过基本令牌对请求进行身份验证(我将很快迁移到 Bearer,但将使用相同的方法)。一旦我添加了headers
属性,看起来初始的标题集就会被替换?
注意:我有一个.htaccess
允许跨域请求的定义:
<IfModule mod_headers.c>
Header add Access-Control-Allow-Methods "PUT,GET,POST,DELETE,OPTIONS"
Header add Access-Control-Allow-Credentials "true"
Header add Access-Control-Allow-Headers "Content-Type, Authorization, Access-Control-Allow-Credentials, Access-Control-Allow-Origin, Access-Control-Allow-Methods"
Header add Access-Control-Allow-Origin "*"
</IfModule>
解决了:
这已通过实施此答案解决:https ://stackoverflow.com/a/42558499/335547
credentials
应该包含在属性fetch
中,以便在预检验证中考虑Authorization标头。- API 应该
Access-Control-Allow-Origin
与特定的源主机一起使用,而不是"*"
- API应该使用
Access-Control-Allow-Credentials "true"
解决方案
据我所知,当你定义Access-Control-Allow-Credentials "true"
你不能指定Access-Control-Allow-Origin "*"
时,你必须定义Access-Control-Allow-Origin
为一个特定的 url 列表
推荐阅读
- elasticsearch - 如何使用 logstash 插件配置 jenkins 管道?
- microsoft-graph-api - 如何在 Ms Teams 的侧栏向 Activity 发送消息?
- c++ - 通过指针读取文件
- flutter - listview 的最后一项应该在颤动中拉伸
- c++ - 变量名中的花括号
- .htaccess - 从 htaccess 中的文件扩展名中删除尾部斜杠
- typescript - 你如何获得联合类型中非公共属性的类型?
- javascript - 将传单屏幕截图保存为表单
- heroku - 分解后检索文件更改
- amazon-web-services - 将 cassandra-stress 连接到 AWS Keyspaces