此问题是问题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发送到服务器?
答案 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/json
或text/xml
或其他类型可以压缩为gzip并发送到接收方,并且仅使用Content-Type
标头,接收方将识别输入数据为json/xml/text
类型然后转换回json / xml / text类型的对象。
使用Content-Encoding
标头,只有接收者会识别输入数据正在压缩gzip。然后接收机需要解压缩传入的数据并使用它。