语言/工具版本:
- @角度/cli:1.2.0
- PHP 7.0.8
- Zend 表达 2
- 阿帕奇2.4.23
- 铬65.0.3325.181
- Windows 7的
Issue:
我有一个 Angular2 应用程序,它使用 PHP 应用程序作为所有 XHR 请求的 API。该应用程序工作正常,但当Use a prediction service to load pages more quickly
Chrome 中启用了该选项,并且当应用程序重新加载时,内部发送 HTTP 请求ngOnInit()
组件的卡住很长时间。请求将在 10 秒-2-3 分钟后自行解决,等等,或者如果我发送另一个请求(例如,针对 DOM 上的单击事件的请求),请求也将得到解决
我尝试过的事情:
- 我浏览了多个帖子(例如1 https://stackoverflow.com/questions/30990737/chrome-request-pending-for-long-time, 2 https://stackoverflow.com/questions/5585918/what-does-pending-mean-for-request-in-chrome-developer-window, 3 https://stackoverflow.com/questions/28010156/stalled-and-pending-ajax-requests-by-jquery-in-chrome/30068579等)有类似的问题,但没有一个是非常
有用,我读到如果我有多个 HTTP 请求,可能会发生这种情况。就我而言,我尝试隔离请求,现在我在组件初始化时仅发送一个请求。即使只有一个请求也会被卡住。我的控制台将显示失败
GET
请求然后一直等待,解决后就会成功OPTIONS
请求然后成功GET
.
- 我不确定这是否是我的前端 Angular 的问题
应用程序或后端 PHP 应用程序,因此在初始化时
在该组件中,我调用了一个随机 API 端点:
http://api.randomuser.me/
而不是请求我的 API 端点。
在这种情况下,请求成功,没有任何延迟(尽管
显示 CORS 错误)。所以我认为问题出在我的
后端 API 或 Apache Web 服务器。
- 我试图查看是否有什么原因导致 API 中的延迟,但直到浏览器的请求成功后,应用程序的入口点本身才会被命中。
我也想分享我的虚拟主机配置。如果您发现任何问题:
<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
应用程序本身内部的标头,但仍然没有运气。
- 该应用程序在 Mozilla 或 Chrome 上运行良好
预测服务未启用
您对这种行为的可能原因的建议/答案将会非常有帮助。
好吧,我认为,执行以下操作已经消除了我的机器的延迟。
在解决这个问题之前,我先说一下我的假设:
- 每当“预测服务到
快速加载页面已启用”
- 我的 Apache Web 服务器没有处理这些并行请求。
解决方案:
-
我包括了mpm https://httpd.apache.org/docs/2.4/mpm.htmlApache 的模块文件。您可以找到
线下方httpd.conf
file:
#Include conf/extra/httpd-mpm.conf
并取消注释。
Windows 使用mpm_winnt_模块 https://httpd.apache.org/docs/2.4/mod/mpm_winnt.html对于 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
module.
- 虽然我可以观察到页面加载速度有所提高并且
请求不再卡住,我仍然可以看到交错的
failed and finshed
对我的 chrome 中的每个请求的请求
安慰。
您的回答将非常有价值,并使事情变得更加清晰。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)