当http响应返回时,Python zlib无法解码

时间:2009-12-02 20:30:49

标签: python http http-headers amazon-s3 zlib

我正在使用Amazon S3来提供静态文件。当Content-Type只是'text / css'并且我没有压缩文件时,它会被返回ok。如果我尝试zlib.compress()将返回的内容并将Content-Encoding更改为'gzip',则浏览器无法解码结果。在Chrome中,错误是

Error 330 net::ERR_CONTENT_DECODING_FAILED
在Safari中

“cannot decode raw data” (NSURLErrorDomain:-1015)

与python的zlib有什么特别之处,以确保浏览器可以返回和解压缩结果吗?

4 个答案:

答案 0 :(得分:5)

我有同样的问题。

如果您发送标题:

Content-Encoding: gzip

Safari / Chrome显示错误。

但如果您改为发送:

Content-Encoding: deflate

Safari / Chrome解码输入正常。

答案 1 :(得分:2)

gzipzlib不同。

答案 2 :(得分:0)

可解码。问题在于发送者对接收者说谎 - 这不是确保和谐沟通的好方法。尝试将其称为“zlib”而不是“gzip”。

答案 3 :(得分:0)

我现在使用模块zlib,而不是使用模块originalString = inputFile.read(),(compressedString = zlib.compress(originalString)然后gzip):

stream = cStringIO.StringIO()
compressor = gzip.GzipFile(fileobj=stream, mode='w')
while True:  # until EOF
    chunk = inputFile.read(8192)
    if not chunk:  # EOF?
        compressor.close()
        return stream.getvalue()
    compressor.write(chunk)

然后结果与gzip兼容;我不知道它是否也解决了你的网络服务器问题。