Почему Chrome закрывает соединение, когда REST API возвращает большой ответ? - PullRequest
1 голос
/ 09 июля 2020

Я использую этот REST API

@GET
@Path("/get-file")
@Consumes(MediaType.APPLICATION_JSON + ";charset=UTF-8")
public void getFile(@Context HttpServletRequest request, @Context HttpServletResponse response, 
        @QueryParam("filePath") String filePath, @QueryParam("fileName") String fileName) throws IOException {fileName);
    File fileToDownload = new File(filePath);
    if (fileToDownload.exists()) {
        java.nio.file.Path path = Paths.get(fileToDownload.toURI());
        
        response.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + fileName);
        
        try {
            response.setHeader(HttpHeaders.CONTENT_LENGTH, Long.toString(Files.size(path)));
            
            Files.copy(path, response.getOutputStream());
            response.flushBuffer();
        } catch (IOException e) {
            log.error(e.getLocalizedMessage(), e);
            throw e;
        }
    } else {
        throw new FileNotFoundException();
    }
}

для загрузки файлов, созданных с сервера. Все работает нормально, если размер файла, который я пытаюсь получить, меньше 50 ГБ (более или менее), но когда я пытаюсь загрузить 50 ГБ при использовании Chrome, я получаю исключение java.net.SocketException: Connection reset. Этого не происходит в Firefox, и я могу получить файл как обычно.

Это то, что я вижу на вкладке Chrome Network:

Chrome Вкладка «Сеть»

Загрузка файла - единственная операция, которую я выполняю, и она сразу же терпит неудачу. Если я опущу заголовок CONTENT_LENGTH в ответе, размер ответа достигнет 48 ГБ ~, а затем я получу ту же ошибку.

Кто-нибудь знает об этом? На стороне сервера я использую Java 7 (я тоже пробовал с Java 8), а на стороне клиента я использую AngularJS v1.5.11. Я использую ApacheTomcat для развертывания своего приложения. Дайте мне знать, если вам понадобится дополнительная информация о проблеме.

...