Заголовки HTTP не возвращаются на EC2

У меня есть приложение Spring Boot, развернутое на двух экземплярах EC2 (промежуточная и производственная среда). У меня есть конечная точка, которая используется для загрузки файла. Это выглядит так (приложение написано в Котлине):

@PostMapping("/download") open fun download(@RequestBody request: DownloadRequest, servletResponse: HttpServletResponse) { val file = getByteArray(request.fileId) servletResponse.outputStream.write(file) servletResponse.contentType = MediaType.APPLICATION_OCTET_STREAM_VALUE servletResponse.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"${request.fileId}.zip\"") } 

Когда я выполняю запрос на загрузку на промежуточном компьютере, все в порядке. Я возвращаю файл, и ответ имеет набор заголовков. Это заголовки, которые я вижу в Postman:

 Cache-Control →no-cache, no-store, max-age=0, must-revalidate Connection →keep-alive Content-Disposition →attachment; filename="345412.zip" Content-Length →11756 Content-Type →application/octet-stream Date →Tue, 04 Apr 2017 09:04:19 GMT Expires →0 Pragma →no-cache X-Application-Context →application:8081 X-Content-Type-Options →nosniff X-Frame-Options →DENY X-XSS-Protection →1; mode=block 

Когда я делаю тот же запрос на производство, тело ответа содержит содержимое файла, но два заголовка, которые я установил вручную, «Content-Type» и «Content-Disposition», отсутствуют:

 Cache-Control →no-cache, no-store, max-age=0, must-revalidate Connection →keep-alive Content-Length →56665 Date →Tue, 04 Apr 2017 09:06:45 GMT Expires →0 Pragma →no-cache X-Application-Context →application:8081 X-Content-Type-Options →nosniff X-Frame-Options →DENY X-XSS-Protection →1; mode=block 

Обе машины имеют тот же JAR, что и в контейнере Docker. Оба вызова выполняются непосредственно против экземпляров EC2, используя их частные IP-адреса, поэтому ELB не задействован. Конфигурация двух экземпляров идентична, без каких-либо различий, которые я мог бы найти в консоли AWS.

Вы знаете, что может вызвать это? Есть ли в EC2 параметр, который может помешать некоторым HTTP-заголовкам для отправки в ответ? Я не могу найти причин, по которым заголовки отправляются обратно в одном случае, а не в другом.

Проблема была устранена путем написания заголовков ответов, а затем тела ответа:

 @PostMapping("/download") open fun download(@RequestBody request: DownloadRequest, servletResponse: HttpServletResponse) { val file = getByteArray(request.fileId) servletResponse.contentType = MediaType.APPLICATION_OCTET_STREAM_VALUE servletResponse.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"${request.fileId}.zip\"") servletResponse.outputStream.write(file) } 

Если вы сначала начнете писать тело, заголовки могут быть неправильно настроены. Я все еще не уверен, почему это воспроизводилось только на производственной машине.

Intereting Posts
Не удалось запустить файл jar. (Ошибка: не удалось найти или загрузить основной класс co.pissarra.Mainkt) Можно ли отключить подсказки для неназванных параметров в Android Studio? Повторная установка 2, Rx 2 и асинхронные вызовы Возвращаемое значение Kotlin возвращает значение в firebase Kotlin: Внутренний масштаб – этот Что такое конфигурация generateStubs в Котлине? Как я могу установить FlexBox.alignItems в flex_end программно? Как преобразовать этот код Java в код Kotlin? Какой тип языка Котлин? Чистый ООП или функциональный DigestUtils.md5Hex () генерирует неправильное значение хэша при передаче объекта String Формат в шаблонах строк kotlin Как открыть ссылки, не связанные с URL веб-браузера в браузере из приложения Комната Android: каждая переменная связывания в запросе должна иметь соответствующий метод Диапазоны в Котлине ниже API 21 Как сгруппировать дублированный оператор в .apply в Котлине?