【发布时间】:2018-09-18 21:25:41
【问题描述】:
语言/工具版本:
- @angular/cli: 1.2.0
- PHP 7.0.8
- Zend Expressive 2
- Apache 2.4.23
- 铬 65.0.3325.181
- Windows 7
问题:
我有一个 Angular2 应用程序,它使用 PHP 应用程序作为所有 XHR 请求的 API。该应用程序运行良好,但是当在 Chrome 中启用 Use a prediction service to load pages more quickly 选项时,当重新加载应用程序时,在组件的 ngOnInit() 内发送的 HTTP 请求会卡住很长时间。请求将在 10s-2-3 分钟后自行解决,等等,或者如果我发送另一个请求(例如,DOM 上的点击事件的请求),请求也将解决
我尝试过的事情:
- 我浏览了多个帖子(例如1、2、3 等)都遇到了类似的问题,但没有一个非常
有用,我读到如果我有多个 HTTP 请求,这可能会发生。就我而言,我尝试隔离请求,现在我在组件初始化时只发送一个请求。甚至一个请求都会卡住。我的控制台会显示一个失败的
GET请求,然后继续等待,解决后,将有一个成功的OPTIONS请求,然后是一个成功的GET。 - 我不确定这是否是我的前端 Angular 的问题
应用程序或后端 PHP 应用程序,所以在初始化时
在组件中,我调用了一个随机 API 端点:
http://api.randomuser.me/而不是请求我的 API 端点。 在这种情况下,请求成功,没有任何延迟(尽管它 显示 CORS 错误)。所以我认为问题出在我的 后端 API 或 Apache 网络服务器。 - 我尝试查看是否有某些原因导致 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 上运行良好,当 预测服务未启用
您对导致这种行为的所有可能原因的建议/回答将非常有帮助。
【问题讨论】:
-
您是否同时向后端发送了多个请求? Chrome 只能有 6 个连接到同一主机
-
我一次发送了 5 个请求,但后来我尝试一次只发送一个请求,甚至导致挂起
标签: php angular apache google-chrome