Python zlib gzip 解压缩失败,字符串在客户端通过 pako 压缩
Python zlib gzip decompression fails with string compressed on client side via pako
我想在服务器端(使用 Python 的 zlib)解压一个 JSON 对象,我在浏览器中使用 JS 库 pako 压缩了它。压缩后的字符串通过 XHR 发送到服务器。
不幸的是,服务器端 Python 应用程序失败
Error -3 while decompressing: incorrect header check
我用于客户端压缩的代码:
var json = JSON.stringify(data);
var zlibOpts = {
level: 9,
to: 'string'
};
data = pako.gzip(json, zlibOpts);
服务器端代码:
zlib_window_size = 31
result = zlib.decompressobj().decompress(data, zlib_window_size)
我发现 windowBits
对于 zlib 将字符串识别为 gzip 压缩的字符串很重要(如所述 in this thread and the zlib docs)所以我使用了 paco 用于压缩的相同内容(31
).
我也尝试过不使用任何 windowBits
并在 Python 中使用 zlib.MAX_WBITS|16
或 zlib.MAX_WBITS|32
,但失败并出现相同的错误。
Tornado 上的服务器端应用程序 运行。
非常感谢help/hint!
将 zlib_window_size
从 decompress()
移动到 decompressobj()
。或者干脆去掉 decompressobj()
。一次 decompress()
.
调用不需要它
我想在服务器端(使用 Python 的 zlib)解压一个 JSON 对象,我在浏览器中使用 JS 库 pako 压缩了它。压缩后的字符串通过 XHR 发送到服务器。 不幸的是,服务器端 Python 应用程序失败
Error -3 while decompressing: incorrect header check
我用于客户端压缩的代码:
var json = JSON.stringify(data);
var zlibOpts = {
level: 9,
to: 'string'
};
data = pako.gzip(json, zlibOpts);
服务器端代码:
zlib_window_size = 31
result = zlib.decompressobj().decompress(data, zlib_window_size)
我发现 windowBits
对于 zlib 将字符串识别为 gzip 压缩的字符串很重要(如所述 in this thread and the zlib docs)所以我使用了 paco 用于压缩的相同内容(31
).
我也尝试过不使用任何 windowBits
并在 Python 中使用 zlib.MAX_WBITS|16
或 zlib.MAX_WBITS|32
,但失败并出现相同的错误。
Tornado 上的服务器端应用程序 运行。
非常感谢help/hint!
将 zlib_window_size
从 decompress()
移动到 decompressobj()
。或者干脆去掉 decompressobj()
。一次 decompress()
.