关于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接口请求成功,我先把前端跨域处理删除并再次请求接口,接口也成功请求,完美!