什么是 GZIP 压缩?
GZIP 是由 RFC 1952 定义的无损文件压缩格式。它将由 DEFLATE 算法(RFC 1951)产生的有效载荷包装起来,该算法结合 LZ77 反向引用与 Huffman 编码,将重复数据压缩为紧凑的字节流。
GZIP 压缩是如何工作的?
您的输入完全在浏览器中通过原生 CompressionStream('gzip') API 进行处理。主要步骤如下:
- 工具将您的文本或文件转换为字节流(文本输入使用 UTF-8)。
- 这些字节通过配置为
gzip格式的CompressionStream进行处理。 - 浏览器应用 DEFLATE:滑动窗口 LZ77 扫描查找重复序列,Huffman 编码为常见符号分配更短的代码。
- 在 DEFLATE 载荷外包裹 10 字节的 gzip 头和 8 字节的尾部(原始数据的 CRC32 加上原始长度对 2^32 取模),生成标准的 .gz 容器。
- 对于文本输入,结果以 Base64 或十六进制呈现;对于二进制输入,则提供可下载的 .gz 文件。
为什么使用 GZIP 进行压缩?
- 更小的负载:文本、JSON、HTML、CSS 和源代码通常会压缩为原始大小的一小部分。
- 行业标准:几乎所有 HTTP 服务器、CDN、浏览器、归档工具和编程语言的标准库都能识别 GZIP。
- 隐私:压缩完全在您的浏览器中进行。输入永远不会到达我们的服务器。
- 支持双向操作:输出可使用
gunzip命令行、HTTPContent-Encoding: gzip,以及 Python、Node.js、Go、Java 或 Rust 中的任何 RFC 1952 读取器进行解压。
GZIP 压缩的常见应用有哪些?
GZIP 在整个 Web 和命令行工具中被广泛使用:
- HTTP 传输:Web 服务器使用 GZIP 压缩响应,使页面在网络上加载得更快。
- 日志归档:长期保留的服务器日志以 .gz 文件形式存储以减少磁盘占用。
- 备份和打包:tarball(.tar.gz)压缩整个目录树以便于便携分发。
GZIP 压缩示例是什么样的?
包含许多重复字段名的 1 KB JSON 文档通常可压缩到约 200–300 字节——大小减少四到五倍。大型文本日志的压缩率通常达到 90% 或更高。已经压缩过的输入(JPEG、PNG、MP4、ZIP)无法进一步压缩,反而可能因 GZIP 包装而增加几个字节。
此 GZIP 压缩器直接在您的浏览器中生成标准 RFC 1952 输出。无论是在传输前压缩负载,还是生成用于归档的 .gz 文件,结果都能与网络上的所有 GZIP 兼容工具互操作。