Сжатие и распаковка данных с использованием алгоритмов gzip, deflate, zlib, brotli и zstd.
local compress = require ( " compress " )
Наиболее широко поддерживаемый формат (RFC 1952).
-- Сжатие для HTTP-ответа
local body = json . encode ( large_response )
local compressed , err = compress .gzip. encode ( body )
-- Установка заголовка Content-Encoding
res : set_header ( " Content-Encoding " , " gzip " )
-- Максимальное сжатие для хранения
local archived = compress .gzip. encode ( data , { level = 9 })
-- Быстрое сжатие для реального времени
local fast = compress .gzip. encode ( data , { level = 1 })
Параметр Тип Описание datastring Данные для сжатия optionstable? Опции кодирования (опционально)
Поле Тип Описание levelinteger Уровень сжатия 1-9 (по умолчанию: 6)
Возвращает: string, error
-- Распаковка HTTP-запроса
local content_encoding = req : header ( " Content-Encoding " )
if content_encoding == " gzip " then
local decompressed , err = compress .gzip. decode ( body )
return nil , errors . new ( " INVALID " , " Invalid gzip data " )
-- Распаковка с ограничением размера (защита от zip-бомб)
local decompressed , err = compress .gzip. decode ( data , { max_size = 10 * 1024 * 1024 })
return nil , errors . new ( " INVALID " , " Decompressed size exceeds 10MB limit " )
Параметр Тип Описание datastring Сжатые GZIP-данные optionstable? Опции декодирования (опционально)
Поле Тип Описание max_sizeinteger Макс. размер после распаковки в байтах (по умолчанию: 128MB, макс: 1GB)
Возвращает: string, error
Лучшая степень сжатия для текста (RFC 7932).
-- Лучше всего подходит для статических ресурсов и текста
local compressed = compress .brotli. encode ( html_content , { level = 11 })
-- Кэширование сжатых ресурсов
cache : set ( " static: " .. hash , compressed )
-- Умеренное сжатие для API-ответов
local compressed = compress .brotli. encode ( json_data , { level = 4 })
Параметр Тип Описание datastring Данные для сжатия optionstable? Опции кодирования (опционально)
Поле Тип Описание levelinteger Уровень сжатия 0-11 (по умолчанию: 6)
Возвращает: string, error
local decompressed , err = compress .brotli. decode ( compressed_data )
-- С ограничением размера
local decompressed = compress .brotli. decode ( data , { max_size = 50 * 1024 * 1024 })
Параметр Тип Описание datastring Сжатые Brotli-данные optionstable? Опции декодирования (опционально)
Поле Тип Описание max_sizeinteger Макс. размер после распаковки в байтах (по умолчанию: 128MB, макс: 1GB)
Возвращает: string, error
Быстрое сжатие с хорошим соотношением (RFC 8878).
-- Хороший баланс скорости и степени сжатия
local compressed = compress .zstd. encode ( binary_data )
-- Высокое сжатие для архивов
local archived = compress .zstd. encode ( data , { level = 19 })
-- Быстрый режим для потоковой передачи
local fast = compress .zstd. encode ( data , { level = 1 })
Параметр Тип Описание datastring Данные для сжатия optionstable? Опции кодирования (опционально)
Поле Тип Описание levelinteger Уровень сжатия 1-22 (по умолчанию: 3) dictstring? Байты Zstd-словаря из train_dict (по умолчанию: нет)
Возвращает: string, error
local decompressed , err = compress .zstd. decode ( compressed_data )
Параметр Тип Описание datastring Сжатые Zstandard-данные optionstable? Опции декодирования (опционально)
Поле Тип Описание max_sizeinteger Макс. размер после распаковки в байтах (по умолчанию: 128MB, макс: 1GB) dictstring? Байты Zstd-словаря (должны совпадать со словарём, использованным для кодирования)
Возвращает: string, error
Обучите словарь на образцах данных, чтобы улучшить сжатие множества небольших похожих нагрузок. Передавайте обученный словарь как опцию dict в encode/decode — для обоих должен использоваться один и тот же словарь.
local dict , err = compress .zstd. train_dict ( samples , { size = 112640 })
local packed = compress .zstd. encode ( data , { dict = dict })
local original = compress .zstd. decode ( packed , { dict = dict })
Параметр Тип Описание samplesstring[] Обучающие образцы (хотя бы один >= 8 байт) optionstable? size (integer, целевой размер словаря в байтах, 256-1048576, по умолчанию 114688), id (integer, по умолчанию 0), level (integer, 1-22)
Возвращает: string, error (байты словаря)
Параметр Тип Описание dictstring Байты словаря
Возвращает: table, error — {id: integer, content_size: integer}
Чистое DEFLATE-сжатие (RFC 1951). Используется внутри других форматов.
local compressed = compress .deflate. encode ( data , { level = 6 })
Параметр Тип Описание datastring Данные для сжатия optionstable? Опции кодирования (опционально)
Поле Тип Описание levelinteger Уровень сжатия 1-9 (по умолчанию: 6)
Возвращает: string, error
local decompressed = compress .deflate. decode ( compressed )
Параметр Тип Описание datastring Сжатые DEFLATE-данные optionstable? Опции декодирования (опционально)
Поле Тип Описание max_sizeinteger Макс. размер после распаковки в байтах (по умолчанию: 128MB, макс: 1GB)
Возвращает: string, error
DEFLATE с заголовком и контрольной суммой (RFC 1950).
local compressed = compress .zlib. encode ( data , { level = 6 })
Параметр Тип Описание datastring Данные для сжатия optionstable? Опции кодирования (опционально)
Поле Тип Описание levelinteger Уровень сжатия 1-9 (по умолчанию: 6)
Возвращает: string, error
local decompressed = compress .zlib. decode ( compressed )
Параметр Тип Описание datastring Сжатые Zlib-данные optionstable? Опции декодирования (опционально)
Поле Тип Описание max_sizeinteger Макс. размер после распаковки в байтах (по умолчанию: 128MB, макс: 1GB)
Возвращает: string, error
Алгоритм Применение Скорость Степень Диапазон уровней gzip HTTP, широкая совместимость Средняя Хорошая 1-9 brotli Статические ресурсы, текст Низкая Лучшая 0-11 zstd Большие файлы, потоки Высокая Хорошая 1-22 deflate/zlib Низкоуровневые протоколы Средняя Хорошая 1-9
-- HTTP-ответ на основе Accept-Encoding
local accept = req : header ( " Accept-Encoding " ) or ""
local body = json . encode ( response_data )
if accept : find ( " br " ) then
res : set_header ( " Content-Encoding " , " br " )
res : write ( compress .brotli. encode ( body ))
elseif accept : find ( " gzip " ) then
res : set_header ( " Content-Encoding " , " gzip " )
res : write ( compress .gzip. encode ( body ))
Условие Kind Повторяемо Пустой ввод errors.INVALIDнет Уровень вне диапазона errors.INVALIDнет Некорректные сжатые данные errors.INVALIDнет Распакованный размер превышает лимит errors.INTERNALнет
См. Обработка ошибок для работы с ошибками.