如何在javascript中解压缩gzip xhr响应

How to decompress gzip xhr response in javascript

本文关键字:gzip xhr 响应 解压缩 javascript      更新时间:2023-09-26

我有一个来自web请求的gzip响应,我需要在JavaScript中解压缩(实际上,在AJAX调用的成功函数中-我的代码在无头浏览器中运行,并且没有完整浏览器提供的内置gzip处理支持)。我一直在寻找答案,但我有点难住了。

理想情况下,我希望代码是:

var my_decompressed_string = someGzipDecompressor(xhr.responseText);

我发现,我认为是在JavaScript实现Gzip的答案,但这可能不是我所希望的答案。当尝试通过以下代码片段

使用上述jsxcompressor库时
var my_decompressed_string = JXG.decompress(xhr.responseText);

TypeError: 'undefined' is not an object (evaluating '(new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(str))).unzip()[0][0]')

更详细地查看该函数,如果我分解由decompress()函数执行的代码,我得到了我认为是由内部部分返回的好东西…

JXG.Util.Base64.decodeAsArray(xhr.responseText)

…但undefined返回外部…

JXG.Util.Unzip( ... )

所以,这可能是一个死胡同,当然,但如果有人知道一种方式,我原来的问题应该是可能的,或者有任何更好的运气与jsxcompressor.js我将感激不尽。

当然,我可以强制我的AJAX请求返回一个'deflate'响应,但是页面的大小(我无法控制)相当大,请求gzip是为了加快我的页面加载时间。

jsxcompressor.js需要base64编码的字符串来解压,你应该使用:

  var my_decompressed_string = JXG.decompress(btoa(xhr.responseText));

如果你的无头浏览器不支持btoa,那么你应该使用base64编码库,如果你的节点或iojs有大量的base64 NPM包。