IE10, IE11 でダウンロードに失敗する事象について

こんにちは。d99 です。最近、Web アプリケーションで対象 IE バージョンの移行を検討されているお客様が多いようで、以下のお問合せが増えてきているため、ご紹介します。   事象 ASP.NET で作成されたファイルダウンロードページで、IE9 まででは問題なくダウンロードできたのに、IE10 以降では「(ファイル名)がダウンロードできませんでした」とエラーになります。 詳細 後述の原因に合致する場合、当該ファイルダウンロードページでは Response.Close() が使用されています。これを Response.End() に置き換えるとエラーが発生しなくなります。 Response.Close() は TCP 接続を強制的に切断するメソッドで、クライアントに対して正しい応答を返すためには一般的には使用されません(クライアントからの悪意のある要求に対して応答せずに接続を切断する、といった場合に使用されます)。Response.End() は ASP との互換のために残されているメソッドではありますが、応答の終了というイメージに近い動作を行います(この際、HttpModule 等、処理パイプライン全体に処理を中断したことを通知するため ThreadAbortException が発報されます)。 HttpResponse.Close メソッド ()https://msdn.microsoft.com/ja-jp/library/system.web.httpresponse.close(v=vs.110).aspx HttpResponse.End メソッド ()https://msdn.microsoft.com/ja-jp/library/system.web.httpresponse.end(v=vs.110).aspx 原因 当該現象は、下記ブログの記事に該当していると考えられます。 IEInternals : Content-Length and Transfer-Encoding Validation in theIE10 Download Manager http://blogs.msdn.com/b/ieinternals/archive/2012/07/16/content-length-and-transfer-encoding-validation-in-ie10-download-manager-couldnt-be-downloaded-retry-cancel.aspx IE9 までは、サーバーからのレスポンスにヘッダー Content-Length が含まれない場合や、”Transfer-Encoding:chunked” が指定されている場合であっても転送データのサイズや終端のチェックを厳密に行っていませんでした。 しかし、IE10 以降のダウンロードマネージャーでは、厳密にチェックを行うよう動作が変更されました。この変更により、レスポンスヘッダーにContent-Length が含まれない場合や、チャンク転送でありながら転送データの終端を示す 0-sized…