【问题标题】:What header should be used for sending GZIP compressed JSON from Android Client to Server?应该使用什么标头将 GZIP 压缩 JSON 从 Android 客户端发送到服务器?
【发布时间】:2012-07-10 00:40:42
【问题描述】:

这个问题是问题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 发送到服务器?

【问题讨论】:

  • Duplicate? 简短回答是request.addHeader("Accept-Encoding", "gzip");
  • @Audrius 好的,我应该删除问题还是其他问题标题会对社区有所帮助?
  • 我标记了它,所以它会被关闭,正如你所说,替代标题会帮助其他人。
  • @Audrius 如果你想回答,添加它,我会接受或者你可以编辑我的答案。
  • @GauravAgrawal 您如何在 POST 请求中发送压缩字节 []?

标签: android json servlets http-headers gzip


【解决方案1】:

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

【讨论】:

  • 如果您还想知道如何指定 json 文本为 UTF-8:将内容类型设置为 application/json; charset=utf-8
【解决方案2】:

This的回答告诉你,你需要设置一个header,表明你正在发送压缩数据:

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

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

【讨论】:

  • 对不起@Audrius,我希望你能欣赏迈克尔汉普顿的更多优点,因此我接受它是为了更好的社区。​​span>
【解决方案3】:
  • Content-Type:application/json - 告诉 http 调用中内容数据的类型
  • Content-Encoding: gzip - 说明正在使用什么压缩。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-24
    • 2020-07-28
    • 2011-08-15
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多