【问题标题】:tornado web application fails to decode compressed http bodytornado web 应用程序无法解码压缩的 http 正文
【发布时间】:2016-09-27 20:12:44
【问题描述】:

我正在编写一些简单的原型龙卷风网络应用程序,发现龙卷风无法解码 http 请求正文

Error -3 while decompressing: incorrect header check

从 tornado web 应用程序之一,我通过使用 zlib 压缩主体来发送 http 请求。

http_body = zlib.compress(data)

并且还添加了http头:

'Content-Encoding': 'gzip' 

但是,当我在另一个 tornado web 应用程序中收到这个 http 请求时,我看到它导致如上所述的解压缩失败。

处理http请求的示例代码:

class MyRequestHandler(tornado.web.RequestHandler):
    def post(self):
        global num
        message = self.request.body
        self.set_status(200)

我还确保在应用程序侦听时 decompress_request=True

我检查了 tornado 文档和之前的帖子,没有发现任何关于压缩 http 正文部分或任何示例的信息。唯一提到的是 decompress_response 参数,它只是确保来自服务器的压缩 http 响应。

我在这里缺少任何设置吗?

【问题讨论】:

    标签: python http tornado


    【解决方案1】:

    gzipzlib 都基于相同的底层压缩算法,但它们不是一回事。您必须在这里使用gzip 而不仅仅是zlib

    def post_gzip(self, body):
        bytesio = BytesIO()
        gzip_file = gzip.GzipFile(mode='w', fileobj=bytesio)
        gzip_file.write(utf8(body))
        gzip_file.close()
        compressed_body = bytesio.getvalue()
        return self.fetch('/', method='POST', body=compressed_body,
                          headers={'Content-Encoding': 'gzip'})
    

    一些zlib 函数也采用神秘的选项,导致它们产生gzip-format 输出。这些可以与zlib.decompressobjzlib.compressobj 一起使用来进行流压缩和解压缩。

    【讨论】:

    • 感谢本。这有帮助。
    猜你喜欢
    • 2012-12-02
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2021-09-15
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多