【问题标题】:Is there a way to allow CORS to process custom headers on preflight response有没有办法允许 CORS 在预检响应中处理自定义标头
【发布时间】:2021-10-27 23:24:05
【问题描述】:

我正在使用 slim 框架 v4 来构建 API。我发现使用自定义标题根本不起作用。对于解决此问题的任何线索,我将不胜感激。

我已按照https://www.slimframework.com/docs/v4/cookbook/enable-cors.html 上的文档进行操作,但无法解决问题。

我在 Apache 上设置了一些配置

标头始终设置 Access-Control-Allow-Origin "*" 标头始终设置 访问控制允许标头“自定义令牌”

<script>
  axios({
    method: 'get',
    url: 'http://localhost:8080/income/',
    headers: {
      'Content-Type': 'application/json',
      'Custom-Token': 'vvvv',
      'Access-Control-Allow-Headers': 'Custom-Token'
    },
    responseType: 'json'
  })
    .then(function (response) {
      console.log(response);
    }).catch(error => console.log(error));
</script>

以上来源于a域,想从b域获取资源

我在 'http://localhost:8080/income/' 获得了对来自原点 'http://localhost:8020' 的 XMLHttpRequest 的访问权限已被 CORS 策略阻止:Access 不允许请求标头字段自定义令牌-Control-Allow-Headers 在预检响应中。

【问题讨论】:

  • 如果您可以发布您到目前为止所尝试的内容以及您遇到的任何错误,这将有助于其他人帮助您。

标签: php slim slim-4


【解决方案1】:

我通过在 PHP 端设置自定义标头解决了这个问题

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Custom-Token');

更重要的是,在预检响应之前回显文本

$app->options('/{routes:.*}', function (Request $request, Response $response) {
        // CORS Pre-Flight OPTIONS Request Handler
        echo "OK!";

        return $response;
    });

【讨论】:

  • 自己解决这个问题做得很好。这是理解 CORS 的唯一方法。请注意,localhost 增加了混乱。
  • @NVRM。我只是在 localhost 上使用 2 个不同的端口对其进行测试。谢谢,我将在实时域上尝试并验证是否会发生变化。
  • 现在没关系,就文化而言,在 Firefox v60 和 v80 之间(不久前..),本地主机被 CORS 阻止。然后它被允许了,主要是因为权限问题、网络摄像头、GPS 等,没有任何效果!
猜你喜欢
  • 2019-04-12
  • 2020-10-15
  • 2013-10-27
  • 2018-01-15
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 2020-04-25
相关资源
最近更新 更多