此问题是对问题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发送到服务器吗?
要通知服务器您正在发送gzip编码的数据,请发送Content-Encoding标头,而不是Accept-Encoding。
[This答案表明您需要设置一个标题,指示您正在发送压缩的数据:
HttpUriRequest request = new HttpGet(url);
request.addHeader("Content-Encoding", "gzip");
// ...
httpClient.execute(request);
答案还显示了如何处理传入的压缩数据。
Content-Type:application / json-告诉HTTP调用中什么类型的内容数据
Content-Encoding:gzip-告诉正在使用什么压缩。
application / json或text / xml或其他可以压缩为gzip并发送到接收的文件,并且通过使用Content-Type标头,它们将在解压缩后识别输入数据为application / josn或text / xml类型。