压缩的JSON文件无法解压缩

20

我在服务器上存储了大的JSON文件(30MB+),文件名为file.json。使用jQuery的getJSON("http://site/file.json")函数可以正常运行。但是,下载30MB的JSON响应需要相当长的时间。

因此,我现在将它们存储为Gzip格式的文件(file.json.gz),这将它们缩小到不到1MB!我想通过使用getJSON("http://site/file.json.gz")来达到同样的效果,但是浏览器不会解压缩GZIP的响应,所以无法解析。

那么,是否有办法让jQuery或浏览器解压缩已使用GZIP压缩的静态JSON文件,如file.json.gz?

顺便说一句:已保存的文件已正确压缩。如果我手动解压缩它们,我会得到30MB+有效的JSON文件。


2
你应该做的是配置你的Web服务器,使用适当的编码对JSON响应进行gzip压缩。然后服务器将完全在代码下方透明地处理压缩,而Web浏览器将处理解压缩。我不会将此作为答案发布,因为我不知道你的具体情况。但这就是你应该做的。 - Strelok
2
您也可以预先压缩JSON,然后告诉Apache使用适当的头文件来提供文件,以避免一直重新压缩。 - Michael Mior
3个回答

11

浏览器不会自动解压缩任何它遇到的压缩数据。服务器必须告知浏览器该流仅用于传输并且需要在处理之前解压缩(否则您根本无法下载和保存经过压缩的存档!)。您需要让 Web 服务器发送适当的标头(Content-Encoding),但在此之前确保浏览器支持压缩(Accept-Encoding 标头)。大多数 Web 服务器也可以即时 gzip,除非这会带来太大的性能损失。

我有一种感觉,你在浏览器上解析那么多 JSON 的时候会比检索更麻烦...


2
如果浏览器及其底层的XMLHttpObject支持Accept-Encoding gzip, deflate头,则无需在服务器上手动gzip文件,文件(响应)将在传输之前由服务器压缩(缩小)。但是,您需要配置Web服务器(如果使用IIS,请检查其metabase.xml)以根据传入的HTTP请求头应用压缩。配置帮助:对于Apache Web服务器,请参阅:http://httpd.apache.org/docs/2.0/mod/mod_deflate.html;对于IIS:http://www.codinghorror.com/blog/2004/08/http-compression-and-iis-6-0.html

1

虽然有人反对这样做,但是可以使用JavaScript解压缩gzipped数据。请参见this questionthis question以获取解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接