为什么只有 Edge 收到我的上传错误消息?

Why is my upload error message only received by Edge?

我使用 MultipartConfig 通过 Servlet 处理文件上传并在文件过大时发送错误消息:

       private void doUpload(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
            response.setContentType("text/plain");
            response.setCharacterEncoding("UTF-8");

            Part filePart;
            try {
                filePart = request.getPart("file");
            } catch (IllegalStateException e) {
                System.out.println("File To Large");
                response.setStatus(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE);
                PrintWriter writer = response.getWriter();
                writer.println("failure:filetobig");
                writer.flush();
                writer.close();
                return;
            }
         ... (file handling) ...
        }

如果我将 Servlet 与 Jquery-File-Upload(基于 Ajax)一起使用并且文件大小超过 maxFileSize,Edge returns 是正确的错误消息状态代码为 413,就绪状态为 4。如果我对 Firefox 或 Chrome 执行相同的操作,我会收到状态代码 0,就绪状态 0,并且开发工具中的网络选项卡显示没有收到答复。 image

在 Firefox 中,比特率从负变为正,Chrome return 一段时间后为 NaN。无论我使用哪种浏览器,都会执行 System.out.println("File To Large"); 。如果我使用 cURL 执行上传请求,正确的错误消息是 returned.

我的 MultipartConfig 来测试这个:

@MultipartConfig(maxFileSize = 1024 * 1024 * 30, // 30 MB
        maxRequestSize = 1024 * 1024 * 1000 // 1000 MB
)

我想通了:服务器重置了连接,因为 maxSwallowSize 设置得太低了。

参见:https://tomcat.apache.org/tomcat-8.0-doc/config/http.html

奇怪的是 Edge 不关心这个并显示正确的消息!?