为什么我的 Drupal 8 CORS 设置不起作用?

2024-03-09

从 Drupal 8.2 开始,cors 设置位于核心位置。在我的services.yml (and default.services.yml)我有以下设置:

cors.config:
    enabled: true
    # Specify allowed headers, like 'x-allowed-header'.
    allowedHeaders: ['x-csrf-token','authorization','content-type','accept','origin','x-requested-with']
    # Specify allowed request methods, specify ['*'] to allow all possible ones.
    allowedMethods: ['*']
    # Configure requests allowed from specific origins.
    allowedOrigins: ['*']
    # Sets the Access-Control-Expose-Headers header.
    exposedHeaders: false
    # Sets the Access-Control-Max-Age header.
    maxAge: 1000
    # Sets the Access-Control-Allow-Credentials header.
    supportsCredentials: true

我的域名a.comhtaccess 受密码保护。

在域上b.com我尝试从域加载一些 APIa.com:

$.ajaxSetup({
  xhrField: {
    withCredentials : true
  },
  beforeSend: function (xhr) {
    xhr.setRequestHeader('Authorization', 'Basic Z2VuaXVzOmNvYXRpbmdz');
  }
});

request = $.ajax({
  url: apiBaseUrl + 'api/foobar',
  dataType: 'json',
  type: 'get',
  password: 'foo',
  username: 'bar'
});

在 chrome 中它工作正常,在 firefox 中我收到错误。请求标头:

Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization

响应是 401“需要授权”,它表示请求方法是 OPTIONS(?)。

这里出了什么问题?

执行相同的请求insomnia https://insomnia.rest/工作得很好。


响应是 401“需要授权”,它表示请求方法是 OPTIONS(?)。

您需要将服务器后端配置为不需要授权OPTIONS要求。

该 401 响应表明服务器需要授权OPTIONS请求,但授权失败,因为请求不包含所需的凭据。

原因是,OPTIONS请求作为 CORS 的一部分由您的浏览器自动发送。

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大体解释了浏览器进行 CORS 预检的原因OPTIONS请求,但在问题的具体情况下,原因是因为请求包含Authorization请求标头。

所以发生的事情是:

  1. 您的代码告诉您的浏览器它想要发送带有以下内容的请求Authorization header.
  2. 您的浏览器会说,好的,请求Authorizationheader 要求我进行 CORS 预检OPTIONS确保服务器允许以下请求Authorization header.
  3. 您的浏览器发送OPTIONS向服务器请求没有Authorization header,因为整个目的OPTIONS检查的目的是查看是否可以包含该标头。
  4. 您的服务器看到OPTIONS请求,但不是以表明它允许的方式响应它Authorization请求中包含标头,它会以 401 拒绝它,因为它缺少标头。
  5. 您的浏览器预计 CORS 预检会收到 200 或 204 响应,但却收到 401 响应。所以你的浏览器就停在那里并且永远不会尝试GET来自您的代码的请求。

因此,您需要弄清楚当前服务器端代码的哪一部分导致您的服务器需要授权OPTIONS请求,您需要更改它以便它处理OPTIONS未经授权的请求。

一旦你解决了这个问题,现有的cors.config问题中显示的应该导致服务器响应OPTIONS以正确的方式提出请求——Access-Control-Allow-Headers响应标头包括Authorization,这样您的浏览器就可以说,好的,该服务器允许包含以下内容的跨源请求Authorization标头,所以我现在将继续发送实际的GET要求。

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

为什么我的 Drupal 8 CORS 设置不起作用? 的相关文章

  • 仅当现有填充颜色为特定值时才填充 SVG

    我正在使用此代码来更改 SVG 对象的填充颜色 它可以工作 function g mouseenter function path rect circle this attr fill 00C8C8 但是 我只想在现有填充颜色具有特定值时更
  • 如何创建到任何 fancybox 框的直接链接

    我需要当我单击任何使用 fancybox 的内容时 它会生成一个特定的 URL 因此当我将此链接发送给某人时 它会打开我想要的特定框 例如 fancybox net home当我点击第一张图片时 链接仍然存在fancybox net hom
  • 如何消除 jQuery Mobile 中的悬停延迟?

    我正在使用 jQuery Mobile 制作一个网站 当我将鼠标悬停在按钮上时 它会更改其类 并扩展其颜色 但感觉需要半秒左右才能完成 有没有办法减少这种延迟 您可以覆盖hoverDelay无需修改 jQuery Mobile js 库 要
  • jQuery - xpath 查找?

    如果您在 xml 中有下面的 xml 那么您会使用以下命令变得昏昏欲睡 xml find animal find dog find beagle text jQuery 中是否有类似的方法来使用 xpath xml xpathfind an
  • html 下钻下拉所选值未插入 MYSQL

    我有两个下拉列表 首先从数据库下拉填充 根据第一个下拉列表的选定值从数据库填充第二个下拉列表 document ready function c change function var c1 c selected text if c1 aj
  • 将记录转换为序列化表单数据以通过 HTTP 发送

    有没有办法转换此记录 TError record code Word message String end TState record caption String address Cardinal counters TArray
  • jQuery 插件 (DataTables) 仅在页面刷新时正确加载

    我在使用数据表时遇到问题 当我从不同页面上的链接转到带有表格的页面时 它只会加载表格的 HTML 文本 版本 没有任何 CSS 格式 也没有 JavaScript 排序 搜索等 但是 当我刷新页面时 它将完美加载 在寻找这个问题的答案后 我
  • 如何重新启动/重置 Jquery 动画

    如何在 jquery 中重置动画 例如 CSS block position absolute top 0 left 0 JS block animate left 50 top 50 如果我做 block stop 动画将停止 但我怎样才
  • 使用 jQuery 修改 svg 文件

    我有一个 svg 文件 其中包含一些形状和一些文本 我想在运行时修改 svg 以便某些形状可以更改颜色 某些文本可以更改其内容 假设我的外部 svg 文件中只有两个元素 圆圈 1 具有该 id 的蓝色实心圆圈 text1 包含该 id 的
  • 将占位符添加到我的 html 网站的 Google 自定义搜索引擎中的文本框

    我使用以下代码添加了谷歌自定义搜索引擎 function var cx 005899633628958982661 wekn1lpckzg var gcse document createElement script gcse type t
  • 从 jQuery 事件访问函数中的参数*和*事件

    这是我不久前问的另一个问题的后续问题 通常 您可以从 jQuery 事件的函数调用中访问事件 如下所示 item live click functionToCall 并在函数中 function functionToCall ev do s
  • blueimp jQuery 文件上传,无需 ajax

    我真的很喜欢选择文件并进行预览以及取消或删除选项的客户端处理 但是我想用表单上传页面 并且不需要使用ajax 我一直在摆弄所有选项 但无论如何我都找不到用同步选择的文件发布到表单的方法 是否可以让 data files 与表单一起发布 您可
  • 如何以 JavaScript 编程方式获取旋转的 svg 文本边界

    我正在动态渲染 SVG 图像并创建旋转文本 如果旋转的文本与其他文本重叠 我需要删除该文本 但我无法测量旋转的文本来创建边界并检查下一个标签文本区域 我创建了 3 个 SVG 元素来解释 SVG 1 显示重叠的文本 SVG 2 显示重叠的旋
  • 如何让我的“点击”功能与 iOS 配合使用

    我有一组充当按钮的 Div 这些按钮有一个简单的 jquery click 函数 该函数适用于除 iOS 之外的所有浏览器 例如 div class button click me div and button click function
  • 更改模板标签 <# {% {{ 等后,John Resig 的微模板出现语法错误

    我在使用 John Resig 的 Micro 模板时遇到了一些麻烦 谁能帮我解释为什么它不起作用 这是模板 以及发动机的改装部分 str replace r t n g split join t replace gt t g 1 r re
  • 检测 SVGAnimatedString 的类名

    我在构建 SVG 地图时遇到问题 触发的功能 g 上的 onmouseover 不起作用 我当时用的 window onmouseover function e console log e target className 查看类名是否有问
  • 如何制作复选按钮? (带有标签的隐藏复选框作为按钮:仅限 CSS)

    Using 方法1 创建可点击标签 https stackoverflow com a 6293626 1326147 用 CSS 隐藏复选框 https stackoverflow com a 18078908 1326147 and 使
  • jQuery 提交未触发

    我觉得问这个很愚蠢 但为什么我的 submit 没有发出警报 HTML div class buttonbar style margin left 10 div
  • 如何用方向键移动div

    我想使用 jQuery 用箭头键移动 div 所以右 左 下 上 找到了我想要完成的演示here http atomicrobotdesign com blog htmlcss move objects around the canvas
  • 更改哈希值而不触发 hashchange 事件

    我使用哈希来动态加载内容 为了使后退按钮正常工作 我正在捕获哈希更改 然而 有时我需要更改哈希值而不触发哈希更改函数 例如 当页面重定向到服务器端时 我需要在内容返回后更新哈希值 我想出的最佳解决方案是取消绑定 hashchange 事件

随机推荐