31

这个问题是对这里问题的扩展。我正在使用下面复制的代码来 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();

我正在使用 aDefaultHttpClient将此压缩的 JSONObject 发送到服务器(代码在我的控制范围内)。

我的问题

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

4

3 回答 3

48

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

于 2012-07-10T23:14:51.830 回答
21

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

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

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

于 2012-07-10T22:38:20.697 回答
1
  • Content-Type:application/json- 告诉 http 调用中的内容数据类型
  • Content-Encoding: gzip- 告诉正在使用什么压缩。

application/jsonor or text/xmlor other type can becompressed as gzip and send to receiver and with Content-Typeheader only,接收者将识别传入数据的类型json/xml/text,然后转换回json/xml/text类型的对象。

仅使用Content-Encoding标头的接收器将识别传入的数据正在被 gzip 压缩。然后接收器需要解压缩传入的数据并使用它。

于 2020-01-31T07:40:29.263 回答