语言/工具版本:
问题:
我有一个Angular2应用程序,它使用PHP应用程序作为所有XHR请求的API。该应用程序运行正常但在Chrome中启用Use a prediction service to load pages more quickly
选项时,以及重新加载应用程序时,在组件的ngOnInit()
内发送的HTTP请求会被卡住很长时间。请求将在10s-2-3mins之后自行解决,或者如果我发送另一个请求(例如,对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>
请注意:
Access-Control-Allow-Origin
应用程序本身内部的标题,但仍然没有运气。您对这种行为的可能原因的建议/答案将非常有帮助。
答案 0 :(得分:6)
嗯,我认为,做以下操作已经消除了我机器的延迟。
在解决方案之前,这是我的假设:
解决方案:
我为apache包含了mpm
模块文件。你可以找到
httpd.conf
文件中的以下行:
#Include conf/extra/httpd-mpm.conf
并取消注释。
Windows将mpm_winnt_module用于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目录中的任何位置的文件,虽然在
ThreadsPerChild反映出来,我猜apache不需要了
外部winnt
模块。failed and finshed
请求我的Chrome中的每个请求
控制台。你的答案非常有价值,可以让事情变得更加清晰。
答案 1 :(得分:0)
由于您的网速较慢,会出现此问题。 当onInit()调用它时,它会侵入所有的web服务和放大器。等待第一个webservice的完成。当第一个服务的执行结束时,第二个服务将开始执行但仍然处于Pending状态,因此它在Network的状态列中显示'Pending'