0

InternetExplorerでのファイルのダウンロードに関連する厄介な問題が発生しています。サーバー環境は次のとおりです。

  • mod_jkを使用したWebサーバーとしてのApache2
  • アプリケーションサーバーとしてのTomcat6
  • Java/Springアプリケーション

ファイルはJavaサーブレットから提供されます。この問題は、InternetExplorerを使用して2つのクライアントから同時に特定のファイルが要求された場合に発生します。クライアントの1つがファイル全体の取得に失敗し、ダウンロードが破損します。

Wiresharkを使用してインバウンドデータを確認しました。また、サーバーからのRELOAD(REsource LOcation And Discovery Framing)要求により、ダウンロードは90kファイルの50kのように停止します。

これは、InternetExplorerでのみ発生します。Chrome/Firefoxで同じシナリオを複数回試しました。また、ダウンロードが正常に完了するたびに、ファイルは正常に機能します。

アプリケーションとApacheのログを確認しました。この問題に関連するものは何もありません。デバッグレベルでmod_jkログを確認しました。また、ファイルの50kのみが送信されることを文書化しています。しかし、これに関してどこにもエラーは記録されていません。

ダウンロードサーブレットもスレッドセーフであり、doPost()メソッドでクラス変数は使用されません。

では、この問題の根本を修正または追跡する方法は?

ありがとう。

4

3 に答える 3

2

問題を診断するのに十分な情報はありませんが、Internet Explorerと(たとえば)Firefoxの両方を使用して、リクエストヘッダーとリソースヘッダーの両方(Content-Lengthおよび、および「難解な」ヘッダー)を注意深く検査することをお勧めします。Content-Type

しばらく前に、リソース供給コードにエラーがあり、コンテンツの長さが正しくないという問題が発生しました。これは、どういうわけか、FirefoxとChromeで機能しましたが、InternetExplorerでエラーが発生しました。あなたの問題は似ているかもしれません。

2つの(私が理解しているように)クライアントが問題を引き起こしているという事実は、問題がサーバー側にあると私に思わせます。Explorerのみが送信するヘッダーが、見落としているバグにぶつかっています。ヘッダーを知っていると、バグを見つけるのに役立つか、少なくともそれを回避する方法のヒントを提供することができます。

ダウンロードサーブレットが「本当に」スレッドセーフである場合、それはサーバーの問題にはなり得ないことを私は理解しています(そして同意します)が、一方で、サーバーダウンロードチェーンは本当にスレッドセーフで不変でしたか? IEクライアントは、それが実際には2番目のクライアントであることを「知っています」か?

于 2012-12-25T20:36:44.703 に答える
1

通常、この問題は、ダウンロード スクリプトに正しい MIME タイプを指定することで解決されます。

しかし、それらの pdf が直接の場所からダウンロードされた場合、問題はサードパーティのソフトウェアにあります。

ウイルス対策/マルウェア対策/ファイアウォール ソフトウェアと IE プラグインを無効にして、問題が発生するかどうかを確認します。

于 2012-12-24T15:37:15.213 に答える
0

問題は、実際にはタイムアウトの問題でした。apache2 conf ファイルのTIMEOUTパラメータが300ではなく5に設定されていました。

IE でファイルを要求すると、ブラウザーは、ファイルをダウンロードするか、ファイルを直接開くかを尋ねます。その選択画面でTIMEOUT (5) 秒以上待機すると、2 台のコンピューターから同時にリンクをクリックして同期しようとすると、サーバーはファイルのチャンクのみを送信して停止し、ファイルが破損します。 . しかし、FF/Chrome では、ブラウザーはユーザーの決定を待たずに、同様の選択画面でバックグラウンドでダウンロードを開始します。

私は明らかに問題を完全に間違って診断していました。しかし、私は報告されたことに従いました。それを複製しようとすると、明らかにそれらの画面で5秒以上待っていたため、エラーが何度も発生しました。

于 2012-12-26T22:26:41.137 に答える