Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么HTTP请求在Chrome中被挂起?_Php_Angular_Apache_Google Chrome - Fatal编程技术网

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分钟后自行解决,等等,或者如果我发送另一个

语言/工具版本:

  • @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分钟后自行解决,等等,或者如果我发送另一个请求(例如,在DOM上单击事件时的请求),请求也将解决

    我尝试过的事情:

  • 我浏览过多篇有类似问题的帖子(如、、等),但没有一篇是非常有用的 有用,我读到如果我有多个HTTP请求,这可能会发生。在我的例子中,我尝试隔离请求,现在在组件初始化时只发送一个请求。即使是一个请求也会被卡住。我的控制台将显示一个失败的
    GET
    请求,然后继续等待。解决后,将出现一个成功的
    OPTIONS
    请求,然后是一个成功的
    GET
  • 我不确定这是否是我前端的问题 应用程序或后端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>
    
    
    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
    不允许超限
    命令允许,拒绝
    通融
    

    请注意:

    • 我也尝试过设置
      访问控制允许原点
      应用程序本身内部的头,但仍然没有运气
    • 当 未启用预测服务

    您对这种行为的可能原因提出的建议/答案将非常有用。

    好吧,我认为,执行以下操作已经消除了我机器的滞后

    在解决问题之前,我的假设如下:

  • Chrome正在执行并行请求,只要“预测服务”能够 “已启用快速加载页面”
  • 我的Apache web服务器没有处理这些并行请求
  • 解决方案:

  • 我包含了apache的模块文件。你可以找到
    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
    
  • 重新启动apache
  • 就这样

    我不接受这个问题,因为:

  • 我不知道我所做的是否正确
  • 虽然我启用了
    winnt
    模块,但找不到该模块 文件位于apache目录中的任何位置,尽管 ThreadsParchild被反映出来了,我想apache不需要 外部
    winnt
    模块
  • 虽然我可以观察到页面加载速度已经增加并且 请求不再被卡住,我仍然可以看到交错的
    失败并在我的chrome浏览器中找到每个请求的请求
    控制台

  • 你的答案将非常有价值,让事情变得更清楚。

    这个问题的发生是因为你的网速太慢。。
    当onInit()调用时,它将加载所有Web服务并等待第一个Web服务的完成。当第一个服务的执行结束时,第二个服务将开始执行,但仍处于挂起状态,因此它在网络的状态列中显示“挂起”

    您是否有多个请求一次发送到后端?Chrome只能与同一主机建立6个连接我一次发送了5个请求,但后来我尝试一次只发送一个请求,甚至导致挂起。但是,这无法解释为什么在初始化时对API的一个请求都挂起,当我请求其他API时,它工作正常,但我的两个应用程序都驻留在本地计算机上,因此它与internet速度无关。但是当速度较慢时,意味着传输速率也较慢,因此数据传输也较慢