美文网首页我爱编程
Cannot modify header information

Cannot modify header information

作者: 回声2016 | 来源:发表于2018-01-24 23:39 被阅读0次

    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设置加上,前端跨域请求服务器,一切正常,问题解决。

    相关文章

      网友评论

        本文标题:Cannot modify header information

        本文链接:https://www.haomeiwen.com/subject/ebvpaxtx.html