Что такое GZIP-сжатие?
GZIP — это формат сжатия файлов без потерь, определенный RFC 1952. Он оборачивает полезную нагрузку, созданную алгоритмом DEFLATE (RFC 1951), который сочетает обратные ссылки LZ77 с кодированием Хаффмана, чтобы сжать повторяющиеся данные в компактный поток байтов.
Как работает GZIP-сжатие?
Ваш ввод полностью обрабатывается в браузере с помощью нативного API CompressionStream('gzip'). Основные шаги:
- Инструмент конвертирует ваш текст или файл в поток байтов (UTF-8 для текстового ввода).
- Эти байты передаются через
CompressionStream, настроенный на форматgzip. - Браузер применяет DEFLATE: проход LZ77 со скользящим окном находит повторяющиеся последовательности, а кодирование Хаффмана назначает более короткие коды частым символам.
- Вокруг полезной нагрузки DEFLATE оборачиваются 10-байтовый заголовок gzip и 8-байтовый футер (CRC32 исходных данных плюс исходная длина по модулю 2^32), формируя стандартный контейнер .gz.
- Результат отображается как Base64 или hex для текстового ввода либо предоставляется в виде загружаемого файла .gz для двоичного ввода.
Зачем сжимать с помощью GZIP?
- Меньшие полезные нагрузки: текст, JSON, HTML, CSS и исходный код обычно сжимаются до доли исходного размера.
- Промышленный стандарт: GZIP понятен практически любому HTTP-серверу, CDN, браузеру, инструменту архивации и стандартной библиотеке языков программирования.
- Конфиденциальность: сжатие выполняется полностью в браузере. Ввод никогда не попадает на наши серверы.
- Готов к двустороннему обмену: вывод распаковывается с помощью CLI
gunzip, заголовка HTTPContent-Encoding: gzipи любого читателя RFC 1952 в Python, Node.js, Go, Java или Rust.
Каковы распространённые применения GZIP-сжатия?
GZIP широко используется в вебе и инструментах командной строки:
- HTTP-передача: веб-серверы сжимают ответы GZIP, чтобы страницы быстрее загружались по сети.
- Архивация журналов: долговременные журналы сервера хранятся как файлы .gz для экономии места на диске.
- Резервные копии и пакеты: tar-архивы (.tar.gz) сжимают целые деревья каталогов для переносной дистрибуции.
Как выглядит пример GZIP-сжатия?
JSON-документ размером 1 КБ с большим количеством повторяющихся имен полей обычно сжимается до примерно 200–300 байт — уменьшение размера в четыре-пять раз. Большие текстовые журналы часто сжимаются на 90% или больше. Уже сжатые входные данные (JPEG, PNG, MP4, ZIP) не уменьшатся дальше и могут вырасти на несколько байт из-за обрамления GZIP.
Этот GZIP-компрессор выдает стандартный результат RFC 1952 прямо в вашем браузере. Сжимаете ли вы полезную нагрузку перед передачей или создаете файл .gz для архивации — результат совместим с любым GZIP-инструментом в сети.