Python zlib не декодируется при возврате в ответе http - PullRequest
5 голосов
/ 02 декабря 2009

Я использую Amazon S3 для обслуживания статических файлов. Когда Content-Type - просто 'text / css', и я не сжал файл, он возвращается нормально. Если я попытаюсь zlib.compress () вернуть содержимое и изменить Content-Encoding на 'gzip', браузер не сможет декодировать результат. В Chrome ошибка

Error 330 net::ERR_CONTENT_DECODING_FAILED

в Safari,

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

Есть ли что-то особенное в Python zlib, чтобы браузер мог возвращать и распаковывать результат?

Ответы [ 4 ]

5 голосов
/ 26 апреля 2010

У меня такая же проблема.

Если вы отправите заголовок:

Content-Encoding: gzip

Safari / Chrome показывает эту ошибку.

Но если вы вместо этого отправите:

Content-Encoding: deflate

Safari / Chrome прекрасно декодирует ввод.

2 голосов
/ 02 декабря 2009

gzip - это не то же самое, что zlib .

0 голосов
/ 15 января 2013

Вместо использования модуля 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; Я не знаю, решает ли это проблему с вашим веб-сервером.

0 голосов
/ 03 декабря 2009

Декодируется. Проблема в том, что отправитель лжет получателю - не очень хороший способ обеспечить гармоничное общение. Попробуйте назвать его «zlib» вместо «gzip».

...