Yii2 做接口,跨域问题解决方案

    public function behaviors(): array
    {
        $behaviors = parent::behaviors();

        // 配置跨域
        $behaviors['corsFilter'] = [
            'class' => Cors::class,
            'cors' => [
                'Origin' => ['*'],
                'Access-Control-Request-Methods' => ['*'],
                'Access-Control-Request-Headers' => ['*'],
                'Access-Control-Allow-Credentials' => true,
            ]
        ];

        return $behaviors;
    }

遇到跨域问题,绝大多数反馈的信息都是要求在后端接口进行这样的配置,但是在Yii2框架下,后端会反馈错误:

Error: Allowing credentials for wildcard origins is insecure. Please specify more restrictive origins or set 'credentials' to false in your CORS configuration.
    at service.interceptors.response.use.code.code

我一直都无法理解为什么,有时候我把credentials = false,也成功了

'Access-Control-Allow-Credentials' => false,

后来我查到了这篇说明,https://www.cnblogs.com/kudo-shini/p/13840118.html,原来是授权太过了。

上面的错误提示,是告诉你使用通配符的凭证是不安全的,让你设置更严格的 Origin或者把 Access-Control-Allow-Credentials 设置为 false

这个网址有时候打不开,这里再记录一下,以便以后查找解决

'corsFilter' => [
    'class' => Cors::class,
    'cors'  => [
        'Origin'=> ['http://localhost:8080'],
        'Access-Control-Request-Method' => ['*'],
        'Access-Control-Request-Headers' => ['*'],
        'Access-Control-Allow-Credentials' => true,
        'Access-Control-Max-Age' => 3600,
        'Access-Control-Expose-Headers' => ['Content-Type, Content-Length, Authorization, Accept, X-Requested-With'],
    ]
]

上边配置的解释

  • Origin 即 Access-Control-Allow-Origin 表示 响应头指定了该响应的资源是否被允许与给定的origin共享。
  • Access-Control-Request-Method 用于通知服务器在真正的请求中会采用哪种 HTTP 方法。因为预检请求所使用的方法总是 OPTIONS ,与实际请求所使用的方法不一样,所以这个请求头是必要的。
  • Access-Control-Request-Headers 用于通知服务器在真正的请求中会采用哪些请求头。
  • Access-Control-Allow-Credentials 表示是否可以将对请求的响应暴露给页面。返回true则可以,其他值均不可以。
  • Access-Control-Max-Age 表示返回结果(即 Access-Control-Allow-Methods 和Access-Control-Allow-Headers 提供的信息) 可以被缓存多久。
  • Access-Control-Expose-Headers 列出了哪些首部可以作为响应的一部分暴露给外部。

最终,我的跨域设置为

    public function behaviors(): array
    {
        $behaviors = parent::behaviors();

        // 配置跨域
        $behaviors['corsFilter'] = [
            'class' => Cors::class,
            'cors' => [
                'Origin' => ['http://localhost:*'],
                'Access-Control-Request-Methods' => ['*'],
                'Access-Control-Request-Headers' => ['*'],
                'Access-Control-Allow-Credentials' => true,
                'Access-Control-Allow-Headers' => ['content-type'],
            ]
        ];

        return $behaviors;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值