应该使用什么标头将GZIP压缩JSON从Android客户端发送到服务器?

时间:2012-07-10 13:59:53

标签: android json servlets http-headers gzip

此问题是问题here的扩展。我使用下面转载的代码here来GZIP压缩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发送到服务器?

3 个答案:

答案 0 :(得分:42)

要通知服务器您要发送gzip编码数据,请发送Content-Encoding标头,而不是Accept-Encoding

答案 1 :(得分:18)

This回答显示您需要设置标题,表明您正在发送压缩数据:

HttpUriRequest request = new HttpGet(url);
request.addHeader("Content-Encoding", "gzip");
// ...
httpClient.execute(request);

答案还说明了如何处理传入的压缩数据。

答案 2 :(得分:1)

  • Content-Type:application/json-告诉http呼叫中什么类型的内容数据
  • Content-Encoding: gzip-告诉您正在使用哪种压缩方式。

application/jsontext/xml或其他类型可以压缩为gzip并发送到接收方,并且仅使用Content-Type标头,接收方将识别输入数据为json/xml/text类型然后转换回json / xml / text类型的对象。

使用Content-Encoding标头,只有接收者会识别输入数据正在压缩gzip。然后接收机需要解压缩传入的数据并使用它。