Compressao

Comprima e descomprima dados usando algoritmos gzip, deflate, zlib, brotli e zstd.

Carregamento

local compress = require("compress")

GZIP

Formato mais amplamente suportado (RFC 1952).

Comprimir {id="gzip-compress"}

-- Comprimir para resposta HTTP
local body = json.encode(large_response)
local compressed, err = compress.gzip.encode(body)
if err then
    return nil, err
end

-- Definir header Content-Encoding
res:set_header("Content-Encoding", "gzip")
res:write(compressed)

-- Compressao maxima para armazenamento
local archived = compress.gzip.encode(data, {level = 9})

-- Compressao rapida para tempo real
local fast = compress.gzip.encode(data, {level = 1})
Parâmetro Tipo Descrição
data string Dados para comprimir
options table? Opções de codificação opcionais

Opções {id="gzip-compress-options"}

Campo Tipo Descrição
level integer Nivel de compressao 1-9 (padrão: 6)

Retorna: string, error

Descomprimir {id="gzip-decompress"}

-- Descomprimir requisição HTTP
local content_encoding = req:header("Content-Encoding")
if content_encoding == "gzip" then
    local body = req:body()
    local decompressed, err = compress.gzip.decode(body)
    if err then
        return nil, errors.new("INVALID", "Invalid gzip data")
    end
    body = decompressed
end

-- Descomprimir com limite de tamanho (prevenir zip bombs)
local decompressed, err = compress.gzip.decode(data, {max_size = 10 * 1024 * 1024})
if err then
    return nil, errors.new("INVALID", "Decompressed size exceeds 10MB limit")
end
Parâmetro Tipo Descrição
data string Dados comprimidos GZIP
options table? Opções de decodificação opcionais

Opções {id="gzip-decompress-options"}

Campo Tipo Descrição
max_size integer Tamanho maximo descomprimido em bytes (padrão: 128MB, max: 1GB)

Retorna: string, error

Brotli

Melhor taxa de compressao para texto (RFC 7932).

Comprimir {id="brotli-compress"}

-- Melhor para assets estaticos e conteudo de texto
local compressed = compress.brotli.encode(html_content, {level = 11})

-- Cachear assets comprimidos
cache:set("static:" .. hash, compressed)

-- Compressao moderada para respostas de API
local compressed = compress.brotli.encode(json_data, {level = 4})
Parâmetro Tipo Descrição
data string Dados para comprimir
options table? Opções de codificação opcionais

Opções {id="brotli-compress-options"}

Campo Tipo Descrição
level integer Nivel de compressao 0-11 (padrão: 6)

Retorna: string, error

Descomprimir {id="brotli-decompress"}

local decompressed, err = compress.brotli.decode(compressed_data)
if err then
    return nil, err
end

-- Com limite de tamanho
local decompressed = compress.brotli.decode(data, {max_size = 50 * 1024 * 1024})
Parâmetro Tipo Descrição
data string Dados comprimidos Brotli
options table? Opções de decodificação opcionais

Opções {id="brotli-decompress-options"}

Campo Tipo Descrição
max_size integer Tamanho maximo descomprimido em bytes (padrão: 128MB, max: 1GB)

Retorna: string, error

Zstandard

Compressao rapida com boas taxas (RFC 8878).

Comprimir {id="zstd-compress"}

-- Bom equilibrio de velocidade e taxa
local compressed = compress.zstd.encode(binary_data)

-- Compressao maior para arquivamento
local archived = compress.zstd.encode(data, {level = 19})

-- Modo rapido para streaming em tempo real
local fast = compress.zstd.encode(data, {level = 1})
Parâmetro Tipo Descrição
data string Dados para comprimir
options table? Opções de codificação opcionais

Opções {id="zstd-compress-options"}

Campo Tipo Descrição
level integer Nivel de compressao 1-22 (padrão: 3)

Retorna: string, error

Descomprimir {id="zstd-decompress"}

local decompressed, err = compress.zstd.decode(compressed_data)
if err then
    return nil, err
end
Parâmetro Tipo Descrição
data string Dados comprimidos Zstandard
options table? Opções de decodificação opcionais

Opções {id="zstd-decompress-options"}

Campo Tipo Descrição
max_size integer Tamanho maximo descomprimido em bytes (padrão: 128MB, max: 1GB)

Retorna: string, error

Deflate

Compressao DEFLATE raw (RFC 1951). Usado internamente por outros formatos.

Comprimir {id="deflate-compress"}

local compressed = compress.deflate.encode(data, {level = 6})
Parâmetro Tipo Descrição
data string Dados para comprimir
options table? Opções de codificação opcionais

Opções {id="deflate-compress-options"}

Campo Tipo Descrição
level integer Nivel de compressao 1-9 (padrão: 6)

Retorna: string, error

Descomprimir {id="deflate-decompress"}

local decompressed = compress.deflate.decode(compressed)
Parâmetro Tipo Descrição
data string Dados comprimidos DEFLATE
options table? Opções de decodificação opcionais

Opções {id="deflate-decompress-options"}

Campo Tipo Descrição
max_size integer Tamanho maximo descomprimido em bytes (padrão: 128MB, max: 1GB)

Retorna: string, error

Zlib

DEFLATE com header e checksum (RFC 1950).

Comprimir {id="zlib-compress"}

local compressed = compress.zlib.encode(data, {level = 6})
Parâmetro Tipo Descrição
data string Dados para comprimir
options table? Opções de codificação opcionais

Opções {id="zlib-compress-options"}

Campo Tipo Descrição
level integer Nivel de compressao 1-9 (padrão: 6)

Retorna: string, error

Descomprimir {id="zlib-decompress"}

local decompressed = compress.zlib.decode(compressed)
Parâmetro Tipo Descrição
data string Dados comprimidos Zlib
options table? Opções de decodificação opcionais

Opções {id="zlib-decompress-options"}

Campo Tipo Descrição
max_size integer Tamanho maximo descomprimido em bytes (padrão: 128MB, max: 1GB)

Retorna: string, error

Escolhendo um Algoritmo

Algoritmo Melhor Para Velocidade Taxa Faixa de Nivel
gzip HTTP, ampla compatibilidade Media Boa 1-9
brotli Assets estaticos, texto Lenta Melhor 0-11
zstd Arquivos grandes, streaming Rapida Boa 1-22
deflate/zlib Baixo nivel, protocolos especificos Media Boa 1-9
-- Resposta HTTP baseada em 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))
else
    res:write(body)
end

Erros

Condição Tipo Retentável
Entrada vazia errors.INVALID não
Nivel fora da faixa errors.INVALID não
Dados comprimidos inválidos errors.INVALID não
Tamanho descomprimido excede limite errors.INTERNAL não

Veja Error Handling para trabalhar com erros.