CGI que devuelve contenido comprimido.

Chema Cortés py en ch3m4.org
Jue Dic 2 10:08:32 CET 2004


El Miércoles, 1 de Diciembre de 2004 23:28, Pepe Aracil escribió:
> Hola.
>
> Estoy acabando una aplicación web, y hay una parte de ella que retorna una
> lista bastante larga de una sola vez.
>
> Me he fijado en que practicamente todos los navegadores incluyen en la
> petición esta cabecera:
>
> Accept-Encoding: x-gzip, x-deflate, gzip, deflate
>
> ¿Esto quiere decir que aceptan contenido comprimido con gzip?

Efectívamente. El "deflate" te indica que también acepta "zip". Hay algunos 
navegadores (eg: lynx) que también aceptan "compress".


> Si es así,¿ como debo retornar el contenido comprimido ?

Envía la cabecera "Content-Encoding: gzip" y el archivo comprimido (en 
binario) como cuerpo ("body"). Para no tener que crear ficheros temporales, 
combina gzip.GzipFile con cStringIO:


def compressBuf(s):
  zbuf=cStringIO.StringIO()
  zfile=gzip.GzipFile(mode='wb', fileobj=zbuf, compresslevel=9)
  zfile.write(s)
  zfile.close()
  return zbuf.getvalue()

body=make_a_the_body()

if not "gzip" in os.environ["HTTP_ACCEPT_ENCODING"]:
  print "Content-Type: text/html"
  print
  print body
else:
  print "Content-Type: text/html"
  print "Content-Encoding: gzip"
  print "Content-Length: %d"%len(zBuf)
  print
  print compressBuf(zBuf),


> Si se puede comprimir me supondría un gran ahorro en ancho de banda, porque
> he comprimido a mano el listado y este se queda en un 20% de su tamaño
> original.
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: application/pgp-signature
Size: 189 bytes
Desc: no disponible
URL: <http://mail.python.org/pipermail/python-es/attachments/20041202/9d31a737/attachment.pgp>
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es