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

Gau*_*wal 26 android json gzip servlets http-headers

这个问题是这里问题的延伸.我使用的代码在这里抄录如下,以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();
Run Code Online (Sandbox Code Playgroud)

我使用a DefaultHttpClient将此压缩的JSONObject发送到服务器(代码在我的控制中).

我的问题

我应该使用什么标题request?我request.setHeader("Content-type", "application/json");用于将JSON发送到服务器?

Mic*_*ton 43

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


Aud*_*ius 20

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

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

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


小智 5

  • Content-Type:application/json- 告诉http调用中的内容数据是什么类型
  • Content-Encoding: gzip- 告诉使用什么压缩。

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

通过Content-Encoding标头,只有接收方才能识别传入数据是否经过 gzip 压缩。然后接收方需要解压缩传入的数据并使用它。