前端接口数据压缩解压分两种:HTTP层Gzip由浏览器自动处理,优化传输;业务层需用pako或LZ-String手动压缩大文本等,用于存储或WebSocket传输。

前端对接口响应数据做压缩与解压,通常有两种场景:一种是配合服务端启用 HTTP 层 Gzip 压缩(自动完成,无需 JS 干预);另一种是业务层主动压缩/解压原始数据(如大 JSON、日志、配置等),需借助 JS 库手动处理。两者目标不同:前者优化传输体积,后者解决前端存储或跨端传递限制。
HTTP 层 Gzip:浏览器自动协商,最常用也最省心
现代浏览器在发请求时默认带上 Accept-Encoding: gzip, deflate, br,服务端若支持且满足条件(文本类型、大小超阈值),就会返回 Content-Encoding: gzip 的响应体。浏览器收到后自动解压,JS 拿到的 response.json() 或 response.text() 已是原始内容,完全无感。
- 验证方法:打开 DevTools → Network → 点击某请求 → 查看 Request Headers 是否含
Accept-Encoding,Response Headers 是否含Content-Encoding: gzip - 注意:小文件(如 <1KB 的 JSON)可能不压缩,因压缩后反而变大;图片、音视频等二进制资源一般不走 Gzip
- Fetch / Axios 等库无需额外配置,该行为由浏览器底层实现
业务层手动压缩:适合大文本、离线缓存或 WebSocket 场景
当需要把一段长字符串(如导出报表、用户草稿、加密密钥块)压缩后存 localStorage、发给 WebWorker、或通过 WebSocket 低带宽通道传输时,就得用 JS 库主动压缩。推荐使用 pako(兼容 zlib/Gzip 标准)或 LZ-String(轻量、纯字符串友好)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
pako 示例(支持 deflate/gzip/inflate):
安装:npm install pako或引入 CDN;
压缩:const compressed = pako.deflate(JSON.stringify(data), { to: 'string' });
解压:const restored = JSON.parse(pako.inflate(compressed, { to: 'string' })); -
LZ-String 示例(专为字符串优化):
安装:npm install lz-string;
压缩:const compressed = LZString.compressToUTF16(longText);
解压:const restored = LZString.decompressFromUTF16(compressed); - 注意:压缩后数据是二进制或 Base64/UTF16 字符串,不能直接 JSON.parse,必须先解压还原
处理后端返回的 ZIP 文件(如下载报表包)
如果接口返回的是一个 application/zip 类型的 Blob(比如导出多个 Excel + PDF 的压缩包),前端需要用 JSZip 解析结构并读取内部文件内容,这不是“压缩响应体”,而是“解析 ZIP 容器”。
立即学习“Java免费学习笔记(深入)”;
- 加载 ZIP:
const zip = await JSZip.loadAsync(blob); - 读取某个文本文件:
const content = await zip.file('report.txt').async('string'); - 读取图片或二进制文件:
const imgBlob = await zip.file('chart.png').async('blob'); - 不适用于普通 API JSON 响应,仅用于明确返回 .zip 文件流的场景

















