后端服务器使用gzip文件进行响应但没有
Content-Encoding: gzip header
。而且我无法控制服务器,因此无法处理问题服务器端。
我现在需要的是使用javascript解压缩gzip压缩文件。
我找到了这个优秀的图书馆,可以帮助我做到这一点:http://nodeca.github.io/pako/
但我不想添加额外的库只是为了解压缩文件。我觉得应该有一种方法可以使用浏览器的本机功能来解压缩。我对么?如果我错了,有人可以解释为什么这个浏览器功能不作为JavaScript API公开吗?有没有办法在javascript中解压缩文件而不添加额外的库?
答案 0 :(得分:1)
我觉得应该有一种方法可以使用浏览器的本机功能来解压缩。如果我错了,有人可以解释为什么这个浏览器功能不会作为javascript API公开吗?
不,不应该,除非是w3c标准,否则不是。关于gzip压缩的唯一标准是an HTTP standard。
我真的相信它不会成为标准因为有数以千计的算法(用于压缩,加密等)你可能想要使用它们并且浏览器无法处理所有这些算法;为一个算法创建接口而不为另一个算法创建接口也是不公平的。
HTTP协议是一种例外。这里的压缩是为了让数百万人的生活更轻松。 HTTP是Web性能的瓶颈,所以只要压缩可用,我就无法想象当你在其他地方需要在JavaScript中使用压缩时。我知道的唯一情况是压缩localStorage
/ indexedDB
中的项目,但即使gzip也无效,因为它不会产生UTF-16
输出。
这就是为什么这不符合标准的原因,这就是为什么它很可能不会出现在那里的原因。
您的特定情况是服务器端实现错误。使用没有合适标题的压缩输出确实有气味。要么不使用压缩,要么正确。
有没有办法在不添加额外库的情况下在javascript中解压缩文件?
实际上除此之外还有一个可能的解决方案:创建一个浏览器扩展,在服务器响应中注入一个合适的头,你不需要一个库,但需要将扩展分发给用户。可能更糟,但仍然可以工作。