为什么非自定义标头包含在 Access-Control-Request-Headers 中?

2024-04-11

我正在尝试发送跨源请求。就Access-Control-Request-Headers就我而言,我在 FireFox、Chrome 和 Safari 中遇到了不同的行为。

Chrome :- Access-Control-Request-Headers:  origin, content-type, accept
Safari :- Access-Control-Request-Headers:  origin, content-type, accept
Firefox:- Access-Control-Request-Headers:  content-type

我的问题是:-

  1. 浏览器如何决定哪些标头将成为 Access-Control-Request-Headers 的一部分?
  2. 据我所知,Access-Control-Request-Headers 中应该只有自定义标头,但所有三个(accept、origin 和 content-type)都不是自定义标头。那么为什么它们是 Access-Control-Request-Headers 的一部分呢?
  3. 为什么行为因浏览器而异?

这里发生了很多不同的事情,所以我会一次回答一个。

Chrome 和 Safari 都基于 WebKit,这就是为什么您会在这些浏览器中看到相同的行为(Chrome 很快就会转向 Blink,但尚未掌握在用户手中)。

最新的 CORS 规范指出Accept是一个简单的请求头。Origin不包含在简单请求标头列表中,但如果不支持它那就太愚蠢了,因为它是 CORS 的基础。所以从技术上来说,Firefox 正在做正确的事情。

但请注意,尽管 Chrome/Safari 包含Accept and Origin标头,他们不验证这些标头是否包含在Access-Control-Allow-Headers响应头。您可以通过访问以下链接来验证这一点:

请注意,预检请求具有标头Access-Control-Request-Headers: accept, origin,但是没有Access-Control-Allow-Headers在回应中。并且实际的 CORS 请求仍然成功。

The Content-Type仅当 header 的值为以下之一时,才将其视为简单请求标头:application/x-www-form-urlencoded, multipart/form-data, or text/plain。所有其他值都将触发预检。这可能就是您在这里看到的。

我不知道为什么浏览器会这样。这可能值得在 WebKit 或 Firefox 留言板上询问。这是 WebKit 设置的代码Access-Control-Request-Headers header:

https://trac.webkit.org/browser/trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp?order=name#L117 https://trac.webkit.org/browser/trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp?order=name#L117

它似乎列出了所有标题,但没有删除简单的标题。我想响应端有代码只需要非简单的标头Access-Control-Allow-Headers回复。

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

为什么非自定义标头包含在 Access-Control-Request-Headers 中? 的相关文章

随机推荐

  • 使用 ContentProvider 插入多行

    我需要在一个事务中插入几行 我可以使用 ContentProvider 来实现吗 我已经在我的应用程序中实现了这一点 这是我使用的代码的要点 在我的内容提供程序中 我重写了 applyBatch 方法 这是一个非常简单的重写方法 Perfo
  • .NET COMException 接口未注册

    我无法理解这一点 我想使用该供应商的 OCXhttp www mobyt it http www mobyt it 发送短信 它是一个 dll 他们提供了 Vb NET Visual C 等的使用示例 我得到的例外是 System Runt
  • 如何防止 img:hover 舍入/摆动? (仅限火狐)

    我注意到 标准的 悬停在以非原始宽度值显示的图像上 当鼠标悬停生效时 将导致轻微的摆动动画 我认为这是由于发生了一些像素舍入 但为什么悬停时图像显示不同 请参考我的测试用例http jsfiddle net z29LM 8 http jsf
  • Git blob 数据和不同信息

    据我所知 Git 的 blob 将 SHA1 哈希值作为文件名 以避免在存储库中重复文件 例如 如果文件 A 的内容为 abc SHA1 哈希为 12345 只要内容不改变 提交 分支就可以指向相同的 SHA1 但是 如果将文件 A 修改为
  • 如何平衡 GAN 中生成器和判别器的性能?

    这是我第一次使用 GAN 我面临着判别器多次优于生成器的问题 我正在尝试重现PA模型来自本文 http openaccess thecvf com content ICCV 2017 papers Sajjadi EnhanceNet Si
  • 使用视觉格式语言将视图置于其超级视图的中心

    我刚刚开始学习 iOS 的 AutoLayout 并了解了 Visual Format Language 除了一件事之外 一切都工作正常 我只是无法让视图在其超级视图中居中 这对于 VFL 是否可行 还是我需要自己手动创建约束 目前 不 看
  • C# - 管道式事件模型

    在 ASP NET Web 应用程序中 事件按特定顺序触发 为了简单起见加载 gt 验证 gt 回发 gt 渲染 假设我想开发这样的管道式事件 例子 活动1 观众正在聚集 各位 活动2和活动3请等待 直到我发出信号 事件 1 完成任务后 活
  • Android Studio 无法识别我的设备 - 一加一

    我激活了 开发人员选项 并选中 USB 调试 我在 sdk 上安装了 google usb 驱动程序 但 Android studio 仍然无法识别我的手机 一加一 我在朋友的笔记本电脑上测试了我的手机 它可以工作 当我安装驱动程序时 我的
  • 从回复中读取文本

    HttpWebRequest request WebRequest Create http google com as HttpWebRequest request Accept application xrds xml HttpWebRe
  • 如何使 CLion 自动格式化具有 Google 代码风格的 C++ 代码,并通过 google cpplint 检查

    我需要使用 google 代码样式自动格式化我的 C 代码 并通过 cpplint 检查 我已经使用 L 在 CLion 中自动格式化我的代码 但是格式化后的代码仍然不遵循 google 代码风格 而且我安装了 CLion cpplint
  • Rails 4:具有 has_many 的 CanCanCan 功能:通过关联

    我有一个包含以下模型的 Rails 应用程序 class User lt ActiveRecord Base has many administrations has many calendars through administratio
  • 无法使用 SSH 连接到 docker 容器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • Zurb 基金会和 IE 8

    下面的 css 示例适用于除 IE8 之外的所有受支持的浏览器 不关注任何低于 IE 8 的浏览器 我正在使用最新版本的 Foundation 当列应该浮动时 它们会在 IE8 中堆叠 实际看到float left 属性应用于样式但它们不浮
  • 在 Mongoose 字符串键中存储 Json 对象

    在我的 Mongoose 架构中 我有一个字符串字段 我希望能够在其中存储 JSON 对象 是否可以 在 Postgres 中 可以将字典存储在字符串列中 我想这样做是因为字典 实际上是 JS 中的 JSON 对象 只是一个简单的读写值 不
  • DatePicker 编辑器模板

    下面是一个 EditorTemplate 它使用以下命令呈现 Bootstrap 日期时间选择器EditorFor助手 我看到的问题是脚本部分 对于一个人来说效果还不错DateTimePicker每个视图 但由于我使用类选择器 每当我使用
  • 如何限制我网站的 API 用户?

    我网站的合法用户偶尔会使用 API 请求攻击服务器 从而导致不良结果 我想设定一个限制 即每 5 秒不超过一次 API 调用或每分钟 n 次调用 尚未弄清楚确切的限制 显然 我可以将每个 API 调用记录在数据库中 并对每个请求进行计算 看
  • 来自终端的 Linux powershell 命令返回命令未找到

    我有一个运行 Ubuntu Server 16 04 且带有 Powershell 的 Linux 机器 如果我从 Linux 终端运行 sudo powershell Invoke Webrequest http ipinfo io js
  • 如何测试在 VB.net TabControl 中选择了哪个选项卡

    我有一个带有两个 TabPage 的 TabControl 我想知道测试当前显示哪个选项卡的最佳方法是什么 我不知道为什么我无法弄清楚这一点 TabControl SelectedTab http msdn microsoft com en
  • F# 查询串联

    我在用SqlDataConnectionF 中的数据提供程序迁移一些行 迁移的一部分是在 3 个表之间进行连接 如下所示 将其视为表的继承A B C where B and C继承自A所以我需要得到的是 类似 Linq Bs Join As
  • 为什么非自定义标头包含在 Access-Control-Request-Headers 中?

    我正在尝试发送跨源请求 就Access Control Request Headers就我而言 我在 FireFox Chrome 和 Safari 中遇到了不同的行为 Chrome Access Control Request Heade