javascript - 浏览器未在 OPTIONS 调用中发送“授权”标头
问题描述
我有一个非常简单的 HTTP 调用:
fetch('http://127.0.0.1:5500/v1/homes/', {
method: "GET",
mode: "cors",
credentials: "same-origin",
headers: {
Authorization: "TEST"
}})
.then(function(response) {
console.log(response);
});
但是当我查看 Google Chrome DevTools 的“网络”选项卡时,OPTIONS 请求中没有“授权”标头。这会导致服务器回复 401 Unauthorized。
浏览器的 curl 等效于请求:
curl 'http://127.0.0.1:5500/v1/homes/' \
-X OPTIONS -H 'Access-Control-Request-Method: GET' \
-H 'Origin: http://localhost:8100'
-H 'Referer: http://localhost:8100/'
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
-H 'Access-Control-Request-Headers: authorization'
--compressed
我是在客户端做错了什么,还是浏览器不发送 OPTIONS 请求中的 Authorization 标头很常见,因此,我需要更改服务器以响应 OPTIONS 调用而不需要 Authorization 标头?
解决方案
浏览器不在 OPTIONS 请求中发送 Authorization 标头是否很常见
不止常见。CORS 规范要求它说“对于带有预检的跨域请求……发出预检请求……排除用户凭据”。
我需要更改服务器以响应 OPTIONS 调用而不需要 Authorization 标头?
是的
推荐阅读
- css - 无法正确对齐列表中的中间文本
- firebase - 在没有身份验证的情况下设置 Firestore,但使用(密钥,签名)数据
- python - 通过 OOP 获取目录中的文件不起作用
- identityserver4 - IdentityServer4 显示 404 - 请求太长
- git - git新手,为什么我在开发分支上看到我的更改,即使我将它们放在功能分支上?
- javascript - 类(模块)未导出
- salesforce - 基于时间的工作流程操作未执行
- angular - 未捕获(承诺):错误:无法匹配任何路由。URL 段:'detail/version2/Tom%20Restaurant
- angular - mat-input 在 mat-table Angular 8 中无法正常工作
- php - 在另一个表中删除和插入新数据后更新一个表