GZIP 压缩包 (.gz)
IETF 标准Gzip (GZ) 是标准的 GNU 压缩实用程序和文件格式,广泛部署在 Unix 操作系统和互联网 HTTP 服务器上,用于快速文件和网络资产压缩。
将 TAR 转换为 GZ
免费的浏览器端 TAR 转 GZ 转换器。在您的设备上即时转换文件。
检查与元数据
操作系统和文件分析器通过检查开头的二进制字节序列来识别 GZ 文件:
字节级文件头签名 (魔数)
操作系统和文件分析器通过检查开头的二进制字节序列来识别 GZ 文件:
十六进制签名 (偏移量 0):
1F 8B 08ASCII 表示形式: ..\x08
标准化: IETF RFC 1952
技术规格
| 容器架构 | 10 字节文件头(魔数 0x1F 0x8B、方法、标志、修改时间和操作系统),后接 DEFLATE 流和 8 字节文件尾 |
| 压缩方式 | DEFLATE 算法(LZ77 滑动窗口 + 霍夫曼编码) |
| 字节序 | 文件头和文件尾中的整数采用小端序 |
| 色彩空间 | 不适用(压缩包容器) |
| 通道与结构 | 单文件压缩字节流 |
| 最大尺寸 | 未压缩大小以模 2^32 记录(支持任意长度的数据流) |
| 透明度 | 100% 按位精确地无损保留数据 |
| 流式传输与渐进式加载 | 支持通过管道和 HTTP 网络进行单遍顺序流式传输 |
技术对比矩阵:GZ 对比同类产品
| 技术属性 | GZ (当前) | BZ2 | BROTLI | ZSTD |
|---|---|---|---|---|
| 解压速度 | 快(约 300 MB/s) | 慢(约 40 MB/s) | 非常快(约 400 MB/s) | 极快(>1.5 GB/s) |
| 在网络上广泛使用 | 100% 的浏览器和服务器 | 网页浏览器均不支持 | 所有浏览器中均通过 HTTPS 支持 | 浏览器和服务器的支持度不断提高 |
| 多文件打包 | 需要 TAR 容器(.tar.gz) | 需要 TAR 容器(.tar.bz2) | 原始流或自定义容器 | 需要 TAR 容器(.tar.zst) |
| 校验和验证 | 32 位 CRC(CRC-32) | 每块 32 位 CRC | 流中无内置校验和 | 64 位 xxHash |
常见损坏模式与十六进制恢复指南
提取错误:“gzip: stdin: unexpected end of file”(gzip:标准输入意外到达文件末尾)。
根本原因: 过早的文件传输终止切断了 DEFLATE 流或 8 字节 CRC32 页脚。
恢复方法: 使用“gzip -d --keep broken.gz”或 File2File.app Gzip 提取器提取部分内容。
安全分析与解析器攻击向量
Gzip 解析器处理用户控制的头部和 DEFLATE 位流,必须防范解压炸弹。
已知攻击向量
- 解压炸弹(ZIP 炸弹)可将数 MB 的 Gzip 数据膨胀为数百 GB 的磁盘占用。
- 从头部读取可选的原始文件名字符串时发生缓冲区溢出。
- 32 位 CRC 检查比较过程中的整数溢出。
防御性最佳实践: 在自动化摄取服务中强制实施严格的解压配额和内存上限。
历史渊源与里程碑
1996IETF 将 Gzip 文件格式规范正式确立为 RFC 1952。
1993被 GNU 项目采用,以取代专有的 Unix"compress"实用程序(.Z 文件)。
1992Jean-loup Gailly 和 Mark Adler 为自由软件运动创建了 Gzip 作为无专利的压缩工具。
核心优势与特点
- 受到 100% 网络客户端支持的互联网 HTTP 压缩("Content-Encoding: gzip")的通用基准。
- 在 10 字节头部内保留原始文件修改时间戳和可选的原始文件名。
- 解压时 CPU 占用轻量,在低功耗移动设备和路由器上运行流畅。
技术局限与劣势
- 仅支持单文件压缩:如果不先将多个文件或目录捆绑到 TAR 容器中,就无法压缩它们。
- 在现代网络文本上,压缩率低于 Brotli 和 Zstandard 等现代算法。
- 页脚中的未压缩大小字段以 32 位模 2^32 记录,因此大于 4 GB 的文件会出现数值回绕。
趣味技术冷知识
- 选择魔数字节 0x1F 0x8B,是因为 0x1F 曾是 Unix“compress”文件的首字节,而 0x8B 用于标识 Gzip。
- 互联网上超过 80% 的网站都使用 Gzip 压缩来向浏览器交付网页。
- Jean-loup Gailly 编写了压缩代码,而 Mark Adler 编写了解压(inflate)代码;两人都获得了 ACM 软件系统奖。
常见技术问题
为什么我无法使用 Gzip 压缩文件夹?
Gzip 用于压缩单个字节流。要压缩文件夹,Unix 系统会先将文件夹打包成单个 .tar 文件,再用 Gzip 压缩,生成 .tar.gz 文件。
.gz 和 .zip 有什么区别?
.zip 是一种归档格式,它将多个文件连同目录索引打包在一起。.gz 仅压缩单个文件,通常在 Unix 系统中与 tar 搭配使用。
如何在 Windows 或 Mac 上解压 .gz 文件?
使用 File2File.app,无需安装软件,即可直接在网页浏览器中快速解压 .gz 文件。