我可以使用 GZIP 压缩 HTTP 请求吗?

2022-09-03 05:52:46

我正在使用移动设备上的Java ME应用程序与Tomcat服务器进行通信。
我想知道我是否可以使用Gzip压缩我的请求/响应,以减少通过网络发送的字节数。


答案 1

现代手机具有如此多的CPU功率,并且网络相对较慢,因此压缩非常有意义。这也很容易做到。

在J2ME方面,你做了这样的事情(假设你使用HttpConnection),

  hc.setRequestProperty("Accept-Encoding", "gzip, deflate");
  if (hc.getResponseCode() == HttpConnection.HTTP_OK) {
      InputStream in = hc.openInputStream();
      if ("gzip".equals(hc.getEncoding())) 
         in = new GZIPInputStream(in);
  ...

我们使用来自tinyline的GZIPInputStream,但我确信还有其他的,

http://www.tinyline.com/utils/index.html

在服务器端,它都是内置的。只需将以下属性添加到服务器中的连接器.xml在Tomcat上,

<Connector 
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,application/json"
... />

答案 2

您可以压缩 HTTP 请求或响应的内容,但不能压缩标头。请参阅 HTTP 1.1 规范的第 3.6 节,以及后面描述内容编码标头的部分。

编辑:另一方面,不能保证HTTP服务器端会接受任何特定的压缩格式。根据HTTP的服务器端实现的质量,它甚至可能无法识别请求内容已被压缩。因此,除非您知道服务器端支持压缩的请求内容,否则您不希望这样做。


推荐