Вы не должны случайным образом отправлять ответы.Вы можете сжать ответ только в том случае, если клиент уведомил сервер о том, что он принимает (понимает) сжатые ответы.Это можно сделать, определив, содержит ли заголовок запроса Accept-Encoding
gzip
.Если оно есть, вы можете смело обернуть OutputStream
ответа в GZIPOutputStream
.Вам нужно только предварительно добавить заголовок Content-Encoding
со значением gzip
, чтобы сообщить клиенту, в какую кодировку было отправлено содержимое, чтобы клиент знал, что ему нужно его разархивировать.
В двух словах:
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
OutputStream output = response.getOutputStream();
String acceptEncoding = request.getHeader("Accept-Encoding");
if (acceptEncoding != null && acceptEncoding.contains("gzip")) {
response.setHeader("Content-Encoding", "gzip");
output = new GZIPOutputStream(output);
}
output.write(json.getBytes("UTF-8"));
(обратите внимание, что вы также хотели бы установить тип содержимого и кодировку символов, это учитывается в примере)
Вы также можете настроить это на уровне сервера приложений.Поскольку неясно, какой из них вы используете, вот лишь пример, нацеленный на Tomcat: проверьте атрибуты compression
и compressableMimeType
элемента <Connector>
в /conf/server.xml
: Ссылка на HTTP-коннектор .Таким образом, вы можете просто написать ответ, не беспокоясь о том, чтобы его сжать.