java java-me http-compression

java - ¿Puedo comprimir las solicitudes HTTP utilizando GZIP?



java-me http-compression (4)

Dado que está utilizando Tomcat, considere la posibilidad de colocar una instancia de Apache HTTP Server delante del servidor Tomcat.

Esto se puede hacer usando el módulo mod_jk para el servidor HTTP Apache. Una vez que hayas hecho eso, puedes usar mod_gzip / mod_deflate en Apache.

Por supuesto, su cliente debe tener la capacidad de manejar las respuestas comprimidas, para que esto funcione. Si obliga a su cliente a trabajar con respuestas comprimidas, el cliente terminará mostrando galimatías, ya que (normalmente) habría estado esperando respuestas de texto sin formato. Encontrará el indicador definitivo de la capacidad del cliente para manejar respuestas comprimidas, en los encabezados Accept-Encoding del cliente.

Esto se puede hacer de manera programática, utilizando un servlet o un filtro de servlet que escribe en un ZipOutputStream o GZipOutputStream, si desea evitar la introducción del servidor HTTP Apache en la red. Encontrará algunos consejos sobre cómo hacer esto en el sitio de OReilly OnJava.com .

Me estoy comunicando con un servidor Tomcat usando una aplicación Java ME en mi dispositivo móvil.
Me preguntaba si podría comprimir mis solicitudes / respuestas utilizando Gzip para reducir la cantidad de bytes enviados a través de la red.


En el lado del servidor, puede habilitarlo como se describe here , pero la aplicación móvil necesitará una biblioteca que pueda descomprimir gzip, como esta . Aunque podría ser un poco de trabajo hacer que funcione ...


Los teléfonos modernos tienen mucha potencia de CPU y la red es relativamente lenta, por lo que la compresión tiene mucho sentido. Es bastante fácil de hacer también.

En el lado J2ME, haces algo como esto (asumiendo que usas 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); ...

Usamos GZIPInputStream desde tinyline pero estoy seguro de que hay otros,

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

En el lado del servidor, todo está incorporado. Solo agregue los siguientes atributos al conector en server.xml en Tomcat,

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


Puede comprimir el contenido de una solicitud o respuesta HTTP, pero no los encabezados. Consulte la sección 3.6 de la especificación HTTP 1.1 y la sección posterior que describe el encabezado de codificación de contenido.

EDITAR: La otra cara de esto es que no hay garantía de que un servidor HTTP acepte ningún formato de compresión en particular. Y dependiendo de la calidad de la implementación de HTTP del lado del servidor, es posible que ni siquiera reconozca que el contenido de la solicitud se haya comprimido. Por lo tanto, no desea hacer esto a menos que sepa que el lado del servidor admite contenido de solicitud comprimido.