Angular CORS 简单请求通过 POST 中的授权标头触发预检

2024-06-24

根据文档,对于简单的请求,预检不应该发生:https://developer.mozilla.org/en/docs/Web/HTTP/Access_control_CORS https://developer.mozilla.org/en/docs/Web/HTTP/Access_control_CORS).

如果我不在请求中添加额外的“Authorization”标头,情况确实如此:

"Content-Type": "application/x-www-form-urlencoded",
"Authorization": "Basic _base64_string_"

没有“授权”标头:

:authority:www.target.com
:method:POST //<----------------This is correct
:path:/oauth2/access_token?client_id=xxx-xxx
:scheme:https
accept:application/json, text/plain, */*
accept-encoding:gzip, deflate, br
accept-language:en-US,en;q=0.8,fr;q=0.6
content-length:79
content-type:application/x-www-form-urlencoded//<----------------This is correct
origin:http://source.com:4200
referer:http://source.com:4200/

通过“Authorization”标头,OPTIONS 方法会自动设置:

:authority:www.target.com
:method:OPTIONS //<----------------This is NOT correct, caused by Authorization header
:path:/oauth2/access_token?client_id=xxx-xxx
:scheme:https
accept:*/*
accept-encoding:gzip, deflate, sdch, br
accept-language:en-US,en;q=0.8,fr;q=0.6
access-control-request-headers:authorization
access-control-request-method:POST
origin:http://source.com:4200
referer:http://source.com:4200/

由于这个问题,我无法授权我的应用程序,服务器响应是:

HTTP method 'OPTIONS' is not allowed. Expected 'POST'

因此,“Authorization”标头似乎触发了 CORS 中的预检。 有人能解释一下吗?


由于这个问题,我无法授权我的应用程序,服务器响应是:

HTTP method 'OPTIONS' is not allowed. Expected 'POST'

如果您对请求发送到的服务器具有管理员访问权限,则需要将该服务器配置为允许 HTTPOPTIONS请求,并用Access-Control-Allow-Headers and Access-Control-Allow-Methods浏览器需要查看响应标头才能允许实际GET or POST或任何你想要做的事情(除了Access-Control-Allow-Origin浏览器需要查看实际请求的响应标头)。

如果您没有该服务器的管理员访问权限来将其配置为将启用 CORS 的响应发送到OPTIONS请求,那么从前端 JavaScript 代码获取请求以使用它的唯一选择是设置 CORS 代理并通过该代理发出请求。答案在“请求的资源上不存在‘Access-Control-Allow-Origin’标头” https://stackoverflow.com/questions/20035101/no-access-control-allow-origin-header-is-present-on-the-requested-resource/42744707#42744707有操作方法的详细信息。

除此之外,您唯一的其他选择是不从前端 JavaScript 代码发出请求,而是从您自己的后端代码发出请求,这会绕过浏览器施加的跨源限制)。

因此,“Authorization”标头似乎触发了 CORS 中的预检。有人能解释一下吗?

是的,当你添加Authorizationheader,这使得它不再是一个“简单的请求”。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests解释这一点;它说触发浏览器进行预检的条件之一是:

如果,除了用户代理自动设置的标头(对于 例子,Connection, User-Agent, or 任何其他标头 Fetch 规范中定义为“禁止标头名称”的名称 https://fetch.spec.whatwg.org/#forbidden-header-name), 该请求包含除以下之外的任何标头那些 Fetch 的 规范定义为“CORS 安全列表请求标头” https://fetch.spec.whatwg.org/#cors-safelisted-request-header, 哪个 如下:

Accept
Accept-Language
Content-Language
Content-Type
DPR
Downlink
Save-Data
Viewport-Width
Width

The Authorization不在该列表中,因此它会触发预检。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular CORS 简单请求通过 POST 中的授权标头触发预检 的相关文章

随机推荐

  • 重复的jquery ui问题

    我正在开发一个 Django 项目 但我的问题是在 JQuery 上 我用了jquery formset js http code google com p django dynamic formset JQuery 插件可在 inline
  • 使用消息队列的应用程序的好例子

    我想了解有关消息应用程序编程和使用消息队列的更多信息 像 qpid Amazon Queues 等 你能给我推荐一些应用程序 最好是 C 如果可能的话开源 以便我可以了解更多信息 另外 您能否告诉我用来决定是否使用消息队列的一般准则 我对学
  • 如何在 C# 中使用 Int64

    问题很简单 在 C 中如何表示 64 位 int 64位int很长
  • Keras 预测给出的误差与评估不同,损失与指标不同

    我有以下问题 我在 Keras 中有一个自动编码器 并对其进行了几个时期的训练 训练概览显示验证 MAE 为 0 0422 MSE 为 0 0024 但是 如果我随后调用 network predict 并手动计算验证错误 我会得到 0 0
  • 对象不支持此操作 IE9 与 CustomEvent 初始化

    我在 IE9 中遇到以下错误 对象不支持此操作 关于此有各种各样的问题 但我的问题专门针对以下代码 var myEvent new CustomEvent additem 据我了解 CustomEvent在 IE9 中支持作为 DOM 操作
  • 如何重命名对象 boto3 S3?

    我在 S3 中有大约 1000 个对象 它们以 abcyearmonthday1 abcyearmonthday2 abcyearmonthday3 想要将它们重命名为 abc year month day 1 abc year month
  • 在删除属性之前,必须删除或重新定义所有包含外键的内容 - EF Core

    使用实体框架核心添加外键后尝试添加迁移时出现上述错误 我正在添加FK public class ApplicantDetail Key public int Id get set ForeignKey GrantProgramFK publ
  • 如何在 JSF 中创建现有组件的组合?

    我想知道是否可以编写我自己的组件 或称其为 Widget Object 我的意思是 而不是 例如 使用h panelGroup and a h outputLabel在里面 做我自己的h panelMarkzzz 作为 panelGroup
  • Firefox 中隐藏滚动条

    我想在页面中隐藏滚动条 但我可以像它有滚动条一样滚动 所以我不能使用溢出 隐藏因为我希望我可以像正常一样滚动 但看不到滚动条 所以我使用这个css代码 类not scroll body是一类body标签 not scroll body we
  • 错误 '_' 未定义 no-undef

    我使用 eslint 检查我的代码 并发生错误 错误 未定义 no undef 我这样写代码 new webpack ProvidePlugin jquery jquery jQuery jquery window jQuery jquer
  • MySQL 获取 ORDER BY 中的行位置

    具有以下 MySQL 表 id INT UNSIGNED name VARCHAR 100 我怎样才能选择一个single行及其在表中其他行中的位置 排序时 name ASC 因此 如果表数据按名称排序时如下所示 id name 5 Alp
  • 如何用相同的方法“包装”两个类?

    我必须使用相同的方法处理两个类 但它们不实现相同的接口 也不扩展相同的超类 我无法 不允许更改此类 并且我不构造此类的实例 我只获取此类的对象 避免大量代码重复的最佳方法是什么 班级之一 package faa public class S
  • 如何解释此故障转储

    我们在 iis 中托管的特定网站上遇到了问题 我无法从事件日志中获取太多信息 我对这些低水平的 原始 诊断工具有点不适应 如果我找错了树 在这种情况下请告诉我 例如 IIS 刚刚损坏 或者我是否 我按照正确的路径尝试定位问题 为应用程序池
  • NativeScript + Vue.js + FontAwesome

    我正在尝试使用 FontAwesome 图标集通过 NativeScript 和 Vue js 构建应用程序 但我无法找出问题 因为我什至没有错误提示消息 我忠实地关注文档 但没有任何反应 我到处寻找 但什么也没有 如果你能帮我解决这个问题
  • java应用程序中与oracle的连接

    我已经下载了 oracle express 11g 版本并安装了它 现在我想从 java 应用程序连接它 这是我的连接代码 Class forName oracle jdbc driver OracleDriver newInstance
  • 在 Android @drawable 中查找图像的主色

    如果您使用 Windows 7 您就会明白为什么我要尝试查找图像中的主色 当您将鼠标悬停在任务栏中的某个程序上时 该特定程序的背景会根据图标中的主色发生变化 我注意到其他程序中也使用了这种技术 但我一时想不起来 我可以看到这对我用来开发应用
  • 通过 TCP 查看 h264 流

    我有一个用于无人机的小型基于 wifi 的 FPV 相机 我已经成功地使用 python 下载并保存 h264 文件 TCP IP 193 168 0 1 TCP PORT 6200 BUFFER SIZE 2056 f open stre
  • 访问基模板函数中派生类的成员函数

    我有一堂课叫DBDriver处理与数据库中给定表的通信 它的公共入口点是一个名为的函数模板execute query 它执行 SELECT 查询 调用此函数后 将执行一些数据库逻辑 然后用结果填充提供的容器 模板类型 这看起来像下面这样 c
  • 如何使用终端打开“-”虚线文件名?

    我尝试了 gedit nano vi leafpad 和其他文本编辑器 它无法打开 我尝试了 cat 和其他文件查找命令 我向你保证这是一个文件而不是目录 这种方法有很多误解 因为使用 作为参数指的是标准输入 标准输出 i e 开发 标准输
  • Angular CORS 简单请求通过 POST 中的授权标头触发预检

    根据文档 对于简单的请求 预检不应该发生 https developer mozilla org en docs Web HTTP Access control CORS https developer mozilla org en doc