8

iframeのリダイレクトによってトリガーされるダウンロードがあります。

  1. ユーザーが「ダウンロード」ボタンをクリックする
  2. JSはサーバーからダウンロードURLを取得します(これはタイムアウトURLであるため、この方法で実行する必要があります)
  3. iframeは、添付ファイルのコンテンツ処理を含むダウンロードURLにリダイレクトされるため、ブラウザーはページの場所を変更せずにダウンロードを開始します。

これは、一部のIEユーザーを除くすべてのユーザーとブラウザーでうまく機能します。

私は問題を再現しようとしました、そしてこれが私が思いついたものです:

  • [保存または開く]ダイアログボックスをクリックしてすばやくクリックすると、ダウンロードは常に機能します
  • [保存または開く]ダイアログボックスをクリックしてゆっくり(10〜20秒など)クリックすると、ダウンロードが機能する場合と機能しない場合があります。パターンを見つけることができませんでした。

スタックしたときの外観は次のとおりです。

ここに画像の説明を入力してください

問題はS3のリンクタイムアウトによるものではありません。上記の私の実験は時間枠内に十分収まっています。

これらの散発的なダウンロードの失敗の原因は何でしょうか?

アップデート

サーバーログは、ダウンロードが完全にユーザーに送信されていることを示しています。

4

4 に答える 4

6

Windows 7 で IE 9 を使用して、78 メガバイトのファイルであるLLVM テスト スイートをダウンロードするテストをいくつか行いました。リンクをクリックすると、ダウンロードが開始されます。Internet Explorer は、確認またはキャンセルを待ちません。IE はバイトを fizzbuz という名前のファイルでダウンロード ディレクトリに保存します。部分的な。IE は、完了時にファイルの名前を変更するか、キャンセルした場合はファイルを削除することで、選択に追いつきます。

タイミングの問題または HTTP の問題である可能性があります。

タイミングの問題

別のプロセスがファイルを開いたり、ロックしたりする可能性はありますか? 熱心すぎるウイルス対策ソフトウェアまたはリアルタイム バックアップ ソフトウェアでしょうか。おそらく、閉じて名前を変更する操作 (サーバーがファイル全体を送信したために実行する必要があります) は、次のようになります。

  1. 最後の有効なバイトを fizzbuzz に書き込みます。部分ファイル
  2. ファイルを閉じる
  3. ファイルの名前を変更する

プロセスが 2 と 3 の間で排他的読み取りのためにファイルを取得するとどうなりますか? おそらく、そのアプリケーションは、IE を混乱させる代替 NTFS ストリームへの書き込みなど、ファイルにいくつかの変更を加えますか?

ブラウザのプラグインにもダウンロードの終了が通知されることに注意してください。別の種類のタイミングの問題は、ダウンロードを監視し、ダウンロードの終了を確認して何らかの操作を行うプラグインによって引き起こされる可能性があります。その操作は失敗するか、場合によっては戻らない可能性があります。

ウイルス対策を実行せずに (ファイルをホワイトリストに登録するよりも優れたテストです)、ブラウザー プラグインを読み込まずに、問題の再現を試みます。

HTTP の問題

サーバーとクライアントは、接続を終了する方法について合意する必要があります。次のいずれかを行う必要があります。

  1. 転送の最後に接続を閉じる
  2. ダウンロードの長さを指定する

これを遠くからデバッグするのは困難ですが、可能であれば、ダウンロードのネットワーク トレースをキャプチャし、次の手がかりを探します。

  1. Content-length ヘッダーが存在しないか、N だけずれている可能性があります (ブラウザーは N バイトが来るのを永遠に待ちます)。
  2. 各クライアントのプロキシ構成は同じですか?
  3. 稼働していないクライアントは HTTP 1.0 にダウングレードされていますか? (「常にプロキシ経由で http 1.0 を使用する」という設定があります)

スクリーン ショットから、ブラウザが到着予定時刻を計算できなかったように見えますが、それとダウンロードの間に相関関係はありません。

于 2012-05-23T04:45:16.387 に答える
4

I don't know how IE handles it, but in other browsers while you choose where you want to store the file the download has already started. What's the timeout of your download URL? Have you tried setting it higher? Does it work more than once? (if not, check your log for failed access attempts). Good luck.

PS: if nothing works, try this.

于 2012-05-16T15:58:48.053 に答える
0

cache-control: max-age0 より大きい値に設定してみてください。IEは、すぐに有効期限が切れるように設定されたコンテンツ (つまり、no-cache を使用) でこのように失敗する可能性があることに気付きました。

于 2012-05-23T04:55:18.130 に答える
0

IE のどのバージョンですか? 完了する前にダウンロードをどうするか決めないと、IE8 が時々誤動作することがあります...

データがクライアント/ブラウザに送信されたことをサーバーが記録する場合、次に調査するのはプロキシとブラウザです。

そして、スクリーンショットは、選択がまだ行われていない間、実際にはダウンロードダイアログのように見えます. バックグラウンドのどこかに選択画面はありますか?

于 2012-05-22T16:54:35.790 に答える