angular+php+nginx,前端需要跨域请求api,所以在接口的BaseController.php加上这几行
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
加上这几行 后,部署到CentOS后,一切正常。但因客户服务器迁移到windows,用的upupw,php是5.6版本。问题来了!
Cannot modify header information - headers already sent by
百度搜的解决办法,删除BOM、文件头尾用ob_start()和ob_end_flush(),不行,还参考(http://blog.csdn.net/zemochen/article/details/53868817)用nginx 设置了CORS,但竟然没生效,可能还是其中某个设置没对,一时也不知原因。后来实在不行,用nginx做了反向代理,前端和api都用个二级域名,BaseController.php里那三行header去掉,跨域的问题解决了(只是测试时又碰到崩溃的事情,其实nginx设置成功了,但chrome测试,还是报不能跨域,原因是chrome还是之前的缓存,浪费好多时间),跨域验证成功后,出现另外的错误,
$http_raw_post_data is deprecated
同时还有报错
Cannot modify header information - headers already sent by
最后按提示编辑php.ini ,设置
always_populate_raw_post_data = -1
重启nginx和fpm,问题解决。看来问题的关键还是在always_populate_raw_post_data = -1这个设置上,为了验证,我把nginx反向代理设置去掉,把BaseController.php的header设置加上,前端跨域请求服务器,一切正常,问题解决。
网友评论