LoginSignup
0
2

More than 5 years have passed since last update.

【問題解決】ファイルダウンロードのHTTPステータスコードが`201`だと、IE11/Edgeではダウンロードできない

Last updated at Posted at 2018-01-04

環境

  • Internet Explorer 11 (11.125.16299.0)
  • Microsoft Edge 41.16299.15.0
  • Firefox 57
  • Chrome 63
  • Servlet 3.1
  • Java8
  • Tomcat9
  • Windows10

やりたいこと

Java Servletでファイルのダウンロード

問題

以下のような、ファイルをダウンロードさせるコードを作成しました。
※HTTP Status Codeが200でなく201であることに注意

DownloadServlet.java
@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        response.setHeader("Content-Disposition", "attachment");
        PrintWriter out = response.getWriter();
        out.write("Hello World");
        response.setStatus(201); //ステータスコードがCreated(OKではない)
    }
}

各ブラウザで、localhost:8080/[ContextPath]/downloadにアクセスしました。

Internet Explorer 11の場合

「このファイルをダウンロードできませんでした。」というメッセージが表示され、ダウンロードできませんでした。

image

image

MIcrosoft Edgeの場合

「ダウンロードを待っています」という状態のままで、ダウンロードはできませんでした。

image

image

Firefox, Chromeの場合

ダウンロードできました。

原因・解決策

HTTPステータスコードが201(Created)であることが問題でした。
私のポカミスです。。。
ステータスコードを200(OK)に変更したら、IE11/Edgeでもダウンロードできました。

response.setStatus(200);

感想

GETメソッドの成功を表すコードは200なので、「ステータスコードが200でないからダウンロードできない」というIE11/Edgeの仕様は、特に問題ないと思います。
いつもなら「IEクソっ!」と思うところですが。。。

参考にしたサイト

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2