2016-11-18 1 views
1

私はservlet-jsp Webアプリケーションを持っています。ログインアクションのリクエストの1つは、FirefoxとIEブラウザで完了するのに最大120秒かかります。ただし、この同じ要求はクロムで正常に完了します(1秒未満)。コードをデバッグすると、私のWebアプリケーションフィルタが応答を素早く返していると判断できますが、ブラウザはそれを受け取るのに120秒かかることを示しています。下記のFirefox開発ツールを見ると、360msの待ち時間と受信時間が120 と表示されます。この同じ振る舞いはIEでも見ることができます。これを引き起こしているかもしれない何か手掛かり?FirefoxとIEは302のステータスリダイレクトリクエストに対して遅い

enter image description here

EDIT 1:この問題は、唯一の302応答コードを返す要求のために観察されています。

EDIT 2:リクエストをチェックするためにインターセプトツールを使用しましたが、これは127.0.0.1(localhost)のプロキシ経由でトラフィックをルーティングする必要がありました。 1つの観察では、これを実行している間にアプリケーションの速度が大幅に向上します。私がこれについて観察した可能な説明は、プロキシアプリケーションがステータスコード200の302要求をブラウザに返すことです。だから、なぜFirefoxとIEブラウザで302コールが遅くなるのだろう?

+0

追加情報がありますか?どのような種類のログインを使用しますか?ログインフローによって行われる操作は何ですか?それはデータベースに接続しますか?どのようなタイプのデータベースですか?クライアント側がサーバー側をどのように呼び出すのか? Ajaxリクエスト?それはサーブレット上でアクションを呼び出しますか? – Davide

+0

私はindex.jspページを使用してサーブレットを呼び出しています。 response.sendRedirect(request.getContextPath()+ "login"); データベースコールがクロムで動作しているため、正常に動作していると仮定します。 –

+0

私はこれを見つけました http://stackoverflow.com/questions/10022704/response-sendredirect-not-working受け入れられた答えを見てください。問題は で少し異なりますが、それは便利です。 'response.sendRedirect()'の後に** return **命令を書いたことがありますか? – Davide

答えて

0

最後に、この問題を自分のアプリから解決することができました。コード内のいずれかの場所で、フラッシュ操作が応答の出力ストリームに対して呼び出されていました。リクエストは302Sが応答した任意のデータを持っていないので、理にかなっているタイプ302でなかったとき

super.getOutputStream().flush(); 

この

はケースのみで行われていました。 Chromeはこれを見るのに十分なほどスマートで、データを待つことはありません。しかし、firefoxとIEはデータを待っているので、その特定の呼び出しに対する接続は閉じられません。これは質問に添付された画像に見られる遅延を引き起こします(ブラウザは到着しないコンテンツをダウンロードしようとします)。

これで、302sコールのフラッシュ操作も行うようにコードを変更しました。これは問題全体を解決しました。

-2

各ブラウザには、接続を処理するための独自の設定があります。限界があります。

答え凝集がすでにあります:

how-to-solve-chromes-6-connection-limit

EDITは:質問が編集されたので、私の答えはもう話題と一致していません。

ウェブアプリケーションのリクエストがブラウザによって異なる場合、問題はクライアント側にある必要があります。 (単一のリクエストとレスポンスの対話の範囲内)

+0

FirefoxのブラウザのHTTP接続制限を変更しようとしましたが、改善はありません。私は非常に高い値と低い値を試しました。 –

+0

ブラウザで1つのタブを試すことができます。すべてのセッション/クッキー/キャッシュがクリアされました。各ブラウザのRequest-Headerを比較することができます。 –

+0

2つのブラウザで異なるリクエストヘッダーは、「UserAgent」のみです。 –

関連する問題