Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php fpm、nginx和头文件_Php_Nginx_Http Headers_Content Type - Fatal编程技术网

php fpm、nginx和头文件

php fpm、nginx和头文件,php,nginx,http-headers,content-type,Php,Nginx,Http Headers,Content Type,最近,我将一个项目从使用Apache的标准PHP切换到使用NGINX的PHP-FPM。我立即注意到,所有JSON请求都返回了text/html内容类型,之前它们返回的是application/JSON 在谷歌和stack overflow搜索了几个小时后,什么也没找到,老实说,我开始觉得自己疯了,我终于意识到,纯粹是出于偶然,这个问题源于两次设置内容类型标题。在应用程序入口点的最开始处,默认设置为text/html,然后在特别想要发送JSON(在XHR请求的情况下)时,再次设置applicati

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

在谷歌和stack overflow搜索了几个小时后,什么也没找到,老实说,我开始觉得自己疯了,我终于意识到,纯粹是出于偶然,这个问题源于两次设置内容类型标题。在应用程序入口点的最开始处,默认设置为text/html,然后在特别想要发送JSON(在XHR请求的情况下)时,再次设置application/JSON

我的问题是,为什么会有不同?为什么在Apache和PHP下运行良好的代码在NGINX和PHP-FPM下停止工作?第二次调用header()失败的原因是什么


作为跟进,代码是否曾经在Apache/PHP下工作过,或者是否两次设置内容类型本质上是错误的/不受欢迎的?

两次设置内容类型头是非法的,因此行为将是未定义的

参见RFC7230第3.2.2节:

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


Web服务器通常会清理应用程序发出的HTTP头,例如添加丢失的头。我们假设Apache删除了重复的头,而nginx不删除。

那么为什么PHP有$replace参数呢?如果默认行为是替换头部,那么PHP将处理这个问题,并且副本甚至不应该发送到Apache/NGINX,这难道不应该假设吗?