zlib, gzip and HTTP compression.

Alan Kennedy alanmk at hotmail.com
Thu Jan 10 15:27:42 EST 2002


Greetings all,

I'm trying to send compressed HTML over a HTTP 1.1 connection, and I
just cannot get it to work. I'm trying to get it working with
mod_python, but the same thing happens with CGI, so I've reproduced it
with a CGI script, to simplify the problem.

I wonder if anyone might be able to indicate to me what is wrong with
the CGI code below?

------------------------------------
#! C:/python21/python.exe

import string
import os
import zlib

# Use any old HTML file (which displays fine standalone)

f = open("test.html")
buf = f.read()
f.close()
zbuf = zlib.compress(buf)

acceptsGzip = 0
if string.find(os.environ["HTTP_ACCEPT_ENCODING"], "gzip") != -1:
	acceptsGzip = 1

print "Content-type: text/html"
if acceptsGzip:
	print "Content-encoding: gzip"
	print "Content-length: %d" % (len(zbuf))
	print                                     # end of headers
	print zbuf                                # and then the buffer
else:
	print                                     # end of headers
	print buf                                 # and then the buffer

# End of script
------------------------------------


So far I've tried

1. Using "Content-encoding: x-gzip"
2. Using "Transfer-encoding: gzip"
3. Using "Transfer-encoding: x-gzip"
4. Setting the "Content-length" to the compressed length of the buffer
5. Setting the "Content-length" to the uncompressed length of the
buffer
6. All possibilities of case, i.e. "Content-Encoding",
"CONTENT-ENCODING", "content-encoding", etc (which shouldn't matter,
it should be case insensitive)

and all combinations of the above, but to no avail.

IE5.0, which is a HTTP 1.1 client, displays an empty HTML page with
the above code. When I use "Content-encoding: x-gzip",
"Transfer-encoding: gzip" or "Transfer-encoding: x-gzip", IE5.0
displays the compressed content (i.e. gobbledegook).

NN4.5, which is a HTTP 1.0 client which accepts gzip encoding, tells
me "A communications error has occurred. Please Try again".

It's getting maddening now :-( It should be simple, shouldn't it?

Is python zlib.compress not compatible with gzip? If not, are there
are Python library routines that are?

I'm using Apache 1.3.22 and Pyton 2.1.1

TIA for any help offered.

Sincerely,

Alan.



More information about the Python-list mailing list