- Сжатый поток - это двоичные данные.Он не должен быть напечатан с
response.getWriter()
.Вместо этого используйте response.getOutputStream()
.
ОБНОВЛЕНИЕ
Шива Бхалла: Использование response.getOutputStream () с text / event-stream не являетсяПри правильной потоковой передаче после отображения 1-го блока ответа в браузере происходит сбой запроса.
Вы должны сжать весь поток, используя один экземпляр Deflater.
В своем коде вы сжимаете каждый фрагмент отдельно.Это эквивалентно следующему:
- Вы берете серию текстовых файлов (01.txt, 02.txt, ...).
- Вы сжимаете каждый из них вархив gzip.(01.txt.gz, 02.txt.gz, ...)
- Вы объединяете архивы в один файл.
Приведенное выше создает неверный архив.Gzip файлы не могут быть объединены таким образом.Правильный код должен выполнить следующее:
- Вы берете серию текстовых файлов (01.txt, 02.txt, ...).
- Вы объединяете текстовые файлы водин файл (text.txt).
- Вы сжимаете файл в архив gzip.(text.txt.gz)
Я рекомендую вам использовать java.util.zip.DeflaterOutputStream
(1) вместо прямого использования Deflater
.Например,
new DeflaterOutputStream(response.getOutputStream(), true);
Остерегайтесь введения уязвимости BREACH .