跨域中间件Headers 不支持星号吗?

问题描述

由于业务需要,要在headers中添加aesKey字段,结果出现了跨域错误:

Request header field aeskey is not allowed by Access-Control-Allow-Headers in preflight response.

但我的跨域中间件也都是正常的,于是尝试把*改成具体的字段就正常了。

'Access-Control-Allow-Headers' => '*',  // 报跨域错误!
'Access-Control-Allow-Headers' => 'Content-Type,aesKey',  // 正常

难道Access-Control-Allow-Headers 不支持*号吗?
请大佬指点迷津。

1001 2 3
2个回答

keytehu

网上搜下 “Access-Control-Allow-Headers: * 跨域不生效”就知道了,并不是所有浏览器都支持Access-Control-Allow-Headers: * ,需要将 Access-Control-Allow-Headers设置为具体值。这个属于浏览器兼容问题。

  • 暂无评论
ichynul

可以从请求头里面拿到,原样返回就行。

以下是tp5的写法,仅供参考,不要直接复制粘贴,要改成webman写法。

关键点:

header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

public function run()
    {
        $moduleList = ['api', 'order'];
        $module = request()->module();
        if ( in_array($module,$moduleList)) {

            header("Access-Control-Allow-Origin: *");
            header('Access-Control-Allow-Credentials: true');
            header('Access-Control-Max-Age: 86400');

            request()->filter('trim,strip_tags,htmlspecialchars');

            if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
                if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) {
                    header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
                }
                if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) {
                    header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
                }
                exit('ok');
            }
        }
    }
  • 暂无评论
年代过于久远,无法发表回答
🔝