Php 为什么HTTP请求在Chrome中被挂起?
语言/工具版本:Php 为什么HTTP请求在Chrome中被挂起?,php,angular,apache,google-chrome,Php,Angular,Apache,Google Chrome,语言/工具版本: @angular/cli:1.2.0 PHP7.0.8 Zend Expressive 2 Apache 2.4.23 铬65.0.3325.181 视窗7 问题: 我有一个Angular2应用程序,它使用PHP应用程序作为所有XHR请求的API。应用程序工作正常,但当Chrome中启用了使用预测服务更快地加载页面时选项,并且当应用程序被重新加载时,组件的ngOnInit()内部发送的HTTP请求会被卡住很长时间。请求将在10秒-2-3分钟后自行解决,等等,或者如果我发送另一个
使用预测服务更快地加载页面时
选项,并且当应用程序被重新加载时,组件的ngOnInit()
内部发送的HTTP请求会被卡住很长时间。请求将在10秒-2-3分钟后自行解决,等等,或者如果我发送另一个请求(例如,在DOM上单击事件时的请求),请求也将解决
我尝试过的事情:
GET
请求,然后继续等待。解决后,将出现一个成功的OPTIONS
请求,然后是一个成功的GET
http://api.randomuser.me/
而不是请求我的API端点。
在这种情况下,请求会毫不延迟地成功(尽管
显示CORS错误)。所以我认为问题在于我的
后端API或Apache web服务器<VirtualHost *:80>
ServerName someName.api
DocumentRoot path_to_public_dir
SetEnv APPLICATION_ENV development
<Directory path_to_public_dir>
SetEnvIf Origin "http(s)?://(www\.)?(local\.)?(localhost:4200|someDomain.com)$" AccessControlAllowOrigin=$0
Header always set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} –d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Options -Indexes +MultiViews +FollowSymLinks
AllowOverride none
Order Allow,Deny
Allow from all
</Directory>
ServerName someName.api
文档根路径\u到\u公共\u目录
SetEnv应用程序\环境开发
SetEnvIf Origin“http(s)?:/(www\)?(local\)?(localhost:4200 | someDomain.com)$”AccessControlAllowOrigin=$0
标头始终设置访问控制允许来源%{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
重新启动发动机
RewriteCond%{REQUEST_FILENAME}-s[或]
RewriteCond%{REQUEST_FILENAME}-l[或]
重写cond%{REQUEST_FILENAME}–d
重写规则^.*$-[NC,L]
重写规则^.*$index.php[NC,L]
选项-索引+多视图+FollowSymLinks
不允许超限
命令允许,拒绝
通融
请注意:
- 我也尝试过设置
应用程序本身内部的头,但仍然没有运气访问控制允许原点
- 当 未启用预测服务
您对这种行为的可能原因提出的建议/答案将非常有用。好吧,我认为,执行以下操作已经消除了我机器的滞后 在解决问题之前,我的假设如下:
httpd.conf
文件中的下一行:
#包括conf/extra/httpd mpm.conf
并取消注释
Windows使用用于mpm的
此多处理模块(MPM)是Windows NT操作系统的默认模块。它使用一个单一的控制过程
启动一个子进程,该子进程将创建线程
处理请求
EnableMMAP off
EnableSendfile on
AcceptFilter http none
AcceptFilter https none
#Extra Notes
#mmap is memory map by apache, don't know I have uncommented this, had read about
this somewhere, but anyway its Off so should not be a Burden on OS
#EnableSendFile:Delivering static files? This link may help:
https://groups.drupal.org/node/68333
#AcceptFilter: windows mpm module, suggests to keep it as none.
I went through this : https://httpd.apache.org/docs/2.4/mod/core.html
and have set AcceptFilter http/https as "connect", it works fine for me.
Please note: I am using Apache 2.4.23
winnt
模块,但找不到该模块
文件位于apache目录中的任何位置,尽管
ThreadsParchild被反映出来了,我想apache不需要
外部winnt
模块失败并在我的chrome浏览器中找到每个请求的请求
控制台
你的答案将非常有价值,让事情变得更清楚。这个问题的发生是因为你的网速太慢。。
当onInit()调用时,它将加载所有Web服务并等待第一个Web服务的完成。当第一个服务的执行结束时,第二个服务将开始执行,但仍处于挂起状态,因此它在网络的状态列中显示“挂起”您是否有多个请求一次发送到后端?Chrome只能与同一主机建立6个连接我一次发送了5个请求,但后来我尝试一次只发送一个请求,甚至导致挂起。但是,这无法解释为什么在初始化时对API的一个请求都挂起,当我请求其他API时,它工作正常,但我的两个应用程序都驻留在本地计算机上,因此它与internet速度无关。但是当速度较慢时,意味着传输速率也较慢,因此数据传输也较慢