web-dev-qa-db-ja.com

HTTPリクエストがChromeで保留中のままになるのはなぜですか?

言語/ツールのバージョン:

  1. @ angular/cli:1.2.0
  2. PHP 7.0.8
  3. Zend Expressive 2
  4. Apache 2.4.23
  5. Chrome 65.0.3325.181
  6. Windows 7

問題:

すべてのXHRリクエストのAPIとしてPHPアプリケーションを使用するAngular2アプリケーションがあります。アプリケーションは正常に動作しますが、Chromeで_Use a prediction service to load pages more quickly_オプションが有効になっている場合、コンポーネントのngOnInit()内で送信されたHTTPリクエストがリロードされ、非常に長い間スタックします。リクエストは10秒から2分3秒などで解決するか、別のリクエストを送信するとリクエストも解決します(たとえば、DOMのクリックイベントでのリクエスト)

私が試したもの:

  1. 私は複数の投稿( 12 、など)を同様の問題で経験しましたが、どれも非常に有用ではありませんでした、私はそれを読みましたこれは、複数のHTTPリクエストがある場合に発生する可能性があります。私の場合、リクエストを分離しようとしましたが、現在はコンポーネントの初期化時にリクエストを1つだけ送信しています。 1つのリクエストでもスタックします。私のコンソールは失敗したGETリクエストを表示し、解決したら待機し続け、成功したOPTIONSリクエストがあり、成功したGETがあります。
  2. これが私のフロントエンドの問題かどうかはわかりませんでしたAngularアプリケーションまたはバックエンドPHPアプリケーション。したがって、コンポーネントの初期化時にランダムAPIを呼び出しました。エンドポイント:APIエンドポイントをリクエストするのではなく_http://api.randomuser.me/_この場合、リクエストは遅滞なく成功します(ただし、CORSエラーが表示されます)。
  3. 何かが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で予測サービスが有効になっていない場合は正常に動作します

そのような行動の原因として考えられるものについてのあなたの提案/回答は本当に役立つでしょう。

12
xyz

まあ、私は、次のことをすることで私のマシンからラグが取り除かれたと思う。

ソリューションの前に、私の仮定はここにあります:

  1. 「ページをすばやく読み込む予測サービスが有効になっている」場合は常にChromeが並列リクエストを実行しています
  2. 私のApache Webサーバーは、これらの並列リクエストを処理していませんでした。

解決:

  1. Apacheの mpm モジュールファイルを含めました。 _httpd.conf_ファイルに次の行があります。

    _#Include conf/extra/httpd-mpm.conf_そしてコメント解除します。

    Windowsはmpmに mpm_winnt_module を使用します。

    このマルチプロセッシングモジュール(MPM)は、Windows NTオペレーティングシステムのデフォルトです。単一の子プロセスを起動する単一の制御プロセスを使用して、要求を処理するスレッドを作成します

  2. 以下の行を見つけてコメント解除します。

    _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
    _
  3. Apacheを再起動します

それでおしまい!

私はこの質問を受け入れられないものとして残しています:

  1. 私がしたことが正しいかどうかはわかりません。
  2. winntモジュールを有効にしましたが、Apacheディレクトリのどこにもモジュールファイルが見つかりませんでした。ThreadsPerChildの変更は反映されますが、Apacheは外部winntモジュールを必要としないと思います。
  3. ページの読み込み速度が向上し、リクエストが止まっていないことがわかりますが、リクエストごとにインターリーブされた_failed and finshed_リクエストがmy chrome console。

あなたの答えは本当に価値があり、物事をより明確にします。

6
xyz

この問題は、インターネットの速度が遅いために発生します。onInit()が呼び出されると、すべてのWebサービスがロードされ、最初のWebサービスの完了を待ちます。したがって、ネットワークのステータス列に「保留中」と表示されます

0
Omkar Jadhav