PHP7—“HTTP_X_请求的_带有”=>“XMLHttpRequest”-不知从何而来
我为这个案子花了很多时间,但我不明白它是怎么产生的。 所以我有一个遗留的php应用程序。 现在,它正在以下环境中工作: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 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');
}