Ответ 1
Чтобы сообщить серверу, что вы отправляете gzip-кодированные данные, отправьте заголовок Content-Encoding, а не Accept-Encoding.
Этот вопрос является продолжением вопроса здесь. Я использую код здесь, воспроизведенный ниже, для сжатия GZIP a JSONObject
.
String foo = "value";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream gzos = null;
try {
gzos = new GZIPOutputStream(baos);
gzos.write(foo.getBytes("UTF-8"));
} finally {
if (gzos != null) try { gzos.close(); } catch (IOException ignore) {};
}
byte[] fooGzippedBytes = baos.toByteArray();
Я использую DefaultHttpClient
для отправки этого сжатого JSONObject на сервер (код находится в моем распоряжении).
Мой вопрос
Какой заголовок следует использовать в моем request
? Я использую request.setHeader("Content-type", "application/json");
для отправки JSON на сервер?
Чтобы сообщить серверу, что вы отправляете gzip-кодированные данные, отправьте заголовок Content-Encoding, а не Accept-Encoding.
Этот ответ показывает, что вам нужно установить заголовок, указывающий, что вы отправляете сжатые данные:
HttpUriRequest request = new HttpGet(url);
request.addHeader("Content-Encoding", "gzip");
// ...
httpClient.execute(request);
В ответе также показано, как обрабатывать входящие сжатые данные.