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

如何在javascript中解压缩gzip xhr响应,javascript,ajax,gzip,compression,Javascript,Ajax,Gzip,Compression,我有一个来自web请求的gzip响应,需要用JavaScript解压(实际上,在AJAX调用的成功函数中——我的代码运行在一个无头浏览器中,没有完整浏览器提供的内置gzip处理支持)。我一直在四处寻找答案,但我有点不知所措 理想情况下,我想要的代码是: var my_decompressed_string = someGzipDecompressor(xhr.responseText); 我发现,当时我认为这是一个答案,但这可能不是我所希望的答案。当试图通过以下代码段使用提到的jsxcompr

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

理想情况下,我想要的代码是:

var my_decompressed_string = someGzipDecompressor(xhr.responseText);
我发现,当时我认为这是一个答案,但这可能不是我所希望的答案。当试图通过以下代码段使用提到的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)
。。。但是为外部部分返回了未定义的

JXG.Util.Unzip( ... )
所以,这当然可能是一条死胡同,但如果有人知道我最初的问题应该是可行的,或者在jsxcompressor.js上有更好的运气,我将不胜感激


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

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

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

如果您的headless浏览器不支持btoa,那么您应该使用base64编码库,如果您的节点或IOJ有大量base64 npm包。

首先要做的是将xhr.responseText转储到控制台,查看它是什么,它的格式是什么,以便响应是gzip,但您的浏览器没有透明地解压缩它?为什么不?这就是我想知道的。。。我认为OP是在试图压缩浏览器已经为他做过的事情。。。但它仍然无法解决“未定义”错误。查看data request/response Firebug Net(数据请求/响应Firebug网络)选项卡并检查返回值和标题可能是本例的起点。忘记提到我的代码运行在无标题浏览器中,并且没有完整浏览器所具有的内置gzip处理支持:-/因此,不得不自己做:-)gzip的xhr.responseText的控制台输出有很多奇怪的字符。非常感谢。我认为这是由于base64编码,但不知道在哪里/如何处理它。我差点就吃了!