【問題解決】ファイルダウンロードのHTTPステータスコードが`201`だと、IE11/Edgeではダウンロードできない
環境
- 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
であることに注意
@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の場合
「このファイルをダウンロードできませんでした。」というメッセージが表示され、ダウンロードできませんでした。
MIcrosoft Edgeの場合
「ダウンロードを待っています」という状態のままで、ダウンロードはできませんでした。
Firefox, Chromeの場合
ダウンロードできました。
原因・解決策
HTTPステータスコードが201
(Created)であることが問題でした。
私のポカミスです。。。
ステータスコードを200
(OK)に変更したら、IE11/Edgeでもダウンロードできました。
response.setStatus(200);
感想
GETメソッドの成功を表すコードは200
なので、「ステータスコードが200でないからダウンロードできない」というIE11/Edgeの仕様は、特に問題ないと思います。
いつもなら「IEクソっ!」と思うところですが。。。
参考にしたサイト
Author And Source
この問題について(【問題解決】ファイルダウンロードのHTTPステータスコードが`201`だと、IE11/Edgeではダウンロードできない), 我々は、より多くの情報をここで見つけました https://qiita.com/yuji38kwmt/items/b369abb2dab4fff4d3ca著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .