tornado web 应用程序无法解码压缩的 http body
tornado web application fails to decode compressed http body
我正在编写一些简单的原型 tornado Web 应用程序,发现 tornado 无法使用
解码 http 请求 body
Error -3 while decompressing: incorrect header check
从其中一个 tornado Web 应用程序,我通过使用 zlib 压缩 body 来发送 http 请求。
http_body = zlib.compress(data)
并且还添加了 http header:
'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 文档和更早的 post,但没有发现任何关于压缩的 http body 部分或其任何示例的信息。唯一提到的是 decompress_response 参数,它只是确保来自服务器的压缩 http 响应。
我是否遗漏了任何设置?
gzip
和 zlib
都基于相同的底层压缩算法,但它们不是一回事。您必须在此处使用 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
格式的输出。这些可以与 zlib.decompressobj
和 zlib.compressobj
一起使用以进行流式压缩和解压缩。
我正在编写一些简单的原型 tornado Web 应用程序,发现 tornado 无法使用
解码 http 请求 bodyError -3 while decompressing: incorrect header check
从其中一个 tornado Web 应用程序,我通过使用 zlib 压缩 body 来发送 http 请求。
http_body = zlib.compress(data)
并且还添加了 http header:
'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 文档和更早的 post,但没有发现任何关于压缩的 http body 部分或其任何示例的信息。唯一提到的是 decompress_response 参数,它只是确保来自服务器的压缩 http 响应。
我是否遗漏了任何设置?
gzip
和 zlib
都基于相同的底层压缩算法,但它们不是一回事。您必须在此处使用 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
格式的输出。这些可以与 zlib.decompressobj
和 zlib.compressobj
一起使用以进行流式压缩和解压缩。