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

Java 我可以使用GZIP压缩HTTP请求吗?,java,java-me,http-compression,Java,Java Me,Http Compression,我正在使用移动设备上的Java ME应用程序与Tomcat服务器通信。 我想知道是否可以使用Gzip压缩我的请求/响应,以减少通过网络发送的字节数。在服务器端,您可以如上所述启用它,但移动应用程序将需要一个可以解压缩Gzip的库,例如。可能是让它工作的一点工作……< p>因为您正在使用Tomcat,考虑将Apache HTTP服务器的实例放在Tomcat服务器前面的可能性。 这可以使用Apache HTTP服务器模块来完成。完成后,就可以在Apache中使用/了 当然,您的客户机应该能够处理压缩

我正在使用移动设备上的Java ME应用程序与Tomcat服务器通信。

我想知道是否可以使用Gzip压缩我的请求/响应,以减少通过网络发送的字节数。

在服务器端,您可以如上所述启用它,但移动应用程序将需要一个可以解压缩Gzip的库,例如。可能是让它工作的一点工作……

< p>因为您正在使用Tomcat,考虑将Apache HTTP服务器的实例放在Tomcat服务器前面的可能性。

这可以使用Apache HTTP服务器模块来完成。完成后,就可以在Apache中使用/了

当然,您的客户机应该能够处理压缩响应,这样才能工作。如果您强制客户机使用压缩响应,客户机将最终显示胡言乱语,因为它(通常)希望得到纯文本响应。您将在客户机的Accept编码头中找到客户机处理压缩响应能力的明确指标


如果您希望避免在网络中引入Apache HTTP服务器,则可以通过编程方式,使用一个servlet或一个写入ZipOutputStream或GZipOutputStream的servlet过滤器来完成。您将在上找到一些指针。

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


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

现代手机的CPU容量非常大,网络速度相对较慢,因此压缩非常有意义。这也很容易做到

在J2ME方面,您可以这样做(假设您使用HttpConnection)

我们使用tinyline的GZIPInputStream,但我相信还有其他的

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

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


正如Stephen C所说,这只会压缩数据或HTTP头吗?@Kevin,这不会压缩头。如果要压缩标题,客户端将如何确定它们是如何压缩的-GZIP只是压缩的一种方法。@Kevin。这是正确的。使用基于标准的HTTP无法压缩头。请注意只发送绝对必要的头。如果压缩头,它将不再是HTTP。你也可以这样做,但你需要一个压缩隧道。J2ME不支持这一点,因此需要做更多的工作。您可以在Tomcat中进行gzip压缩,而无需添加Apache。看看HTTP连接器的compression属性:是的,我知道,但是有一个原因可以解释为什么在HTTP服务器上进行压缩,而不是在应用服务器上——服务器负载的分布。除了运行应用程序逻辑的常规任务外,人们不希望应用程序服务器承担响应压缩的负担。此外,ApacheHTTP服务器比Tomcat具有更好的性能特性。
<Connector 
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,application/json"
... />