php-fpm,nginx和headers

时间:2017-06-17 02:14:17

标签: php nginx http-headers content-type

最近我将项目从使用Apache的标准PHP切换到使用NGINX的PHP-FPM。我立即注意到所有JSON请求都返回了text / html内容类型,之前它们返回了application / json。

经过几个小时搜索谷歌和堆栈溢出并找不到任何东西,老实说开始认为我疯了,我终于意识到,纯粹是偶然的,问题源于设置两次Content-Type标题。一旦在应用程序的入口点开始,默认为text / html,然后再次通过设置application / json时特别想要发送JSON(在XHR请求的情况下)。

我的问题是,为什么不同?为什么在Apache和PHP下完美运行的代码停止在NGINX和PHP-FPM下运行?使第二次调用header()失败的组合是什么?

作为后续工作,代码是否曾在Apache / PHP下工作,或者设置内容类型两次本身就不好/不赞成?

1 个答案:

答案 0 :(得分:0)

设置两次Content-Type标头是非法的,因此行为将是未定义的。

参见RFC7230第3.2.2节:

  

发件人不得在邮件中生成具有相同字段名称的多个标头字段,除非该标头字段的整个字段值定义为逗号分隔列表[即#(值)]或标题字段为一个众所周知的例外(如下所述)。

Web服务器通常会清理应用程序发出的HTTP标头,例如添加缺少的标头。一个假设Apache删除了重复的标题,而nginx没有。