关于thinkphp跨域的坑及解决方法

本文介绍了一种在ThinkPHP5.1中解决跨域问题的方法,并详细记录了解决过程中遇到的一个关于PHP5.6版本的问题及解决步骤。

关于thinkphp跨域

我使用的是thinkphp5.1版本,版本自带跨域解决方案,但好像不起作用。

我是用以下方法解决:

class Common extends Controller
{
    // 控制器初始化
    protected function initialize() {
        parent::initialize();
        // 允许的源域名
        header('Access-Control-Allow-Origin:*');
        //允许的请求头信息
        header("Access-Control-Allow-Headers:Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With");
        //允许的请求类型
        header('Access-Control-Allow-Methods: GET, POST, PUT,DELETE,OPTIONS,PATCH');
        //允许携带证书式访问(携带cookie)
        // header('Access-Control-Allow-Credentials:true');
    }
}

特别说明:在这我还遇到一个巨大的坑(关于php5.6),就是用以上方法解决跨域后,发现get请求确实能跨域,但当我发送post请求后,它仍然给我报了个跨域错误,此时我就很纳闷,为什么get请求可以跨域,而post请求不能跨域。百度了良久了未能查到解决方法。

最后我放弃了,所以我就只好前端解决跨域进行接口联调。前端解决跨域后,发现接口不能用,给我报了这个错误
在这里插入图片描述
我顺这这个错误终于把这个坑解决了。

原来是PHP5.6有的功能已经废弃了(我使用的是php5.6.9),所以我需要打开PHP.ini文件,找到

;always_populate_raw_post_data = -1

把前面的分号去掉

always_populate_raw_post_data = -1

最终post接口请求成功,我先把前端跨域处理删除并再次请求接口,接口也成功请求,完美!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值