PHP7—“HTTP_X_请求的_带有”=>“XMLHttpRequest”-不知从何而来

PHP7—“HTTP_X_请求的_带有”=>“XMLHttpRequest”-不知从何而来,php,ajax,nginx,Php,Ajax,Nginx,我为这个案子花了很多时间,但我不明白它是怎么产生的。 所以我有一个遗留的php应用程序。 现在,它正在以下环境中工作: PHP 5.6.10-1+deb.sury.org~trusty+1 (cli) Zend Engine v2.6.0 with Zend OPcache v7.0.6-dev nginx/1.4.6 对于测试i,请安装php-7 PHP 7.0.0RC3 (cli) Zend Engine v3.0.0-dev, with Zend OPcache v7.0.6-de

我为这个案子花了很多时间,但我不明白它是怎么产生的。 所以我有一个遗留的php应用程序。 现在,它正在以下环境中工作:

PHP 5.6.10-1+deb.sury.org~trusty+1 (cli) 
Zend Engine v2.6.0 with Zend OPcache v7.0.6-dev

nginx/1.4.6
对于测试i,请安装php-7

PHP 7.0.0RC3 (cli) 
Zend Engine v3.0.0-dev, with Zend OPcache v7.0.6-dev

nginx/1.4.6
所以,凯斯。 我第一次加载页面:

加载页面后,执行几个ajax请求

重新加载页面后,在$\u服务器变量中,我们使用HTTP\u X\u请求了\u

但是正如您在请求头中看到的,我们没有这个头。 下面您可以看到nginx访问日志中的标题

Ajax请求

10.0.2.2 - - [29/Sep/2015:15:00:44 +0300] "GET /stat/notifications-count HTTP/1.1" 200 30341 "http://vm-hub.dev:8888/client" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" "-" "no-store, no-cache, must-revalidate" "XMLHttpRequest"
和正常要求

10.0.2.2 - - [29/Sep/2015:15:14:32 +0300] "GET /client HTTP/1.1" 200 95434 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" "-" "no-store, no-cache, must-revalidate" "-"
所以:浏览器不发送此标题。Nginx看不到,也不发送此标头。但在$\u服务器中,此标头存在

我创建了一个小的php sript,它只转储$\u服务器变量。在上面的例子之后,我从浏览器运行它

然后HTTP_X_请求_给我礼物

我无法定义-这是php错误还是其他软件错误

有人能给点建议吗

也许php团队的某个人读过这个问题,可以对这个案例进行评论

从此处安装的PHP: 以及一些手工编译的模块

nginx.conf

site.conf

server {
    listen 80;
    server_name vm-hub.dev www.vm-hub.dev;

    root /media/sf_data/projects/hub/html/hub/public;
    index index.php;

    log_not_found off;
    charset utf-8;

    error_log /media/sf_data/projects/hub/html/hub/log/error.log;
    access_log /media/sf_data/projects/hub/html/hub/log/access.log main;

    try_files $uri @rewriteapp;

    location = /favicon.ico { log_not_found off; access_log off; }

    location @rewriteapp {
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME /media/sf_data/projects/hub/html/hub/public/index.php;
        fastcgi_param  HTTPS off;
        fastcgi_param  APPLICATION_ENV dev;
    }
}
重要提示:该应用程序在同一版本的Ubuntu、nginx和mysql上进行生产。不同的只有PHP版本。 这就是为什么我认为php中存在的问题

更新1。关于这个问题的更多细节 在应用程序中,我们有以下代码

if ($request->isXmlHttpRequest()) {
    return new JsonResponse([/*any data*/]);
} else {
    return new Response('tempalte render');
}
请求和响应JsonResponse-这是Symfony HttpFoundation组件。 所以,当我第一次加载呈现的页面模板时。但当我重新加载页面时,请求定义为AJAX,并返回JsonResponse。 但这种行为是永久性的。现在我无法确定它出现的条件

更新2。 当我发现此错误时,我会尝试:

重新启动nginx-未发生任何更改。 重新启动php fpm-错误消失 因此,一切都表明错误发生在php中

更新3-有罪

我认为有罪的是-快速完成请求; 您可以在下面找到检查此行为的测试脚本。 我在以下方面进行测试:

PHP7 RC3-存在错误 PHP5.6.13-没有bug 这是RC3中的错误。 固定在RC4中


您是否也更改了浏览器?该标题看起来不适用于相同的URL。请求URL为http://vm-hub.dev:8888/client,但脚本的文件名是/media/sf_data/project/hub/html/hub/public/index.php。我不明白吗?您的ajax请求正在发送标头?您的正常请求不发送标头。屏幕截图是来自ajax请求还是普通http请求?honerlawd所有来自普通请求的屏幕截图。@d尝试向某人发送评论,请在其姓名前加上@。仅以正常方式或粗体输入名称不会通知他们注释。
if ($request->isXmlHttpRequest()) {
    return new JsonResponse([/*any data*/]);
} else {
    return new Response('tempalte render');
}