Komprimierung

Komprimieren und dekomprimieren Sie Daten mit gzip, deflate, zlib, brotli und zstd-Algorithmen.

Laden

local compress = require("compress")

GZIP

Am weitesten verbreitetes Format (RFC 1952).

Komprimieren {id="gzip-compress"}

-- Für HTTP-Response komprimieren
local body = json.encode(large_response)
local compressed, err = compress.gzip.encode(body)
if err then
    return nil, err
end

-- Content-Encoding-Header setzen
res:set_header("Content-Encoding", "gzip")
res:write(compressed)

-- Maximale Komprimierung für Speicherung
local archived = compress.gzip.encode(data, {level = 9})

-- Schnelle Komprimierung für Echtzeit
local fast = compress.gzip.encode(data, {level = 1})
Parameter Typ Beschreibung
data string Zu komprimierende Daten
options table? Optionale Kodierungsoptionen

Optionen {id="gzip-compress-options"}

Feld Typ Beschreibung
level integer Komprimierungsstufe 1-9 (Standard: 6)

Gibt zurück: string, error

Dekomprimieren {id="gzip-decompress"}

-- HTTP-Request dekomprimieren
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

-- Dekomprimieren mit Größenbegrenzung (Zip-Bomben verhindern)
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
Parameter Typ Beschreibung
data string GZIP-komprimierte Daten
options table? Optionale Dekodierungsoptionen

Optionen {id="gzip-decompress-options"}

Feld Typ Beschreibung
max_size integer Max. dekomprimierte Größe in Bytes (Standard: 128MB, Max: 1GB)

Gibt zurück: string, error

Brotli

Beste Komprimierungsrate für Text (RFC 7932).

Komprimieren {id="brotli-compress"}

-- Am besten für statische Assets und Textinhalte
local compressed = compress.brotli.encode(html_content, {level = 11})

-- Komprimierte Assets cachen
cache:set("static:" .. hash, compressed)

-- Moderate Komprimierung für API-Responses
local compressed = compress.brotli.encode(json_data, {level = 4})
Parameter Typ Beschreibung
data string Zu komprimierende Daten
options table? Optionale Kodierungsoptionen

Optionen {id="brotli-compress-options"}

Feld Typ Beschreibung
level integer Komprimierungsstufe 0-11 (Standard: 6)

Gibt zurück: string, error

Dekomprimieren {id="brotli-decompress"}

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

-- Mit Größenbegrenzung
local decompressed = compress.brotli.decode(data, {max_size = 50 * 1024 * 1024})
Parameter Typ Beschreibung
data string Brotli-komprimierte Daten
options table? Optionale Dekodierungsoptionen

Optionen {id="brotli-decompress-options"}

Feld Typ Beschreibung
max_size integer Max. dekomprimierte Größe in Bytes (Standard: 128MB, Max: 1GB)

Gibt zurück: string, error

Zstandard

Schnelle Komprimierung mit guten Raten (RFC 8878).

Komprimieren {id="zstd-compress"}

-- Gute Balance zwischen Geschwindigkeit und Rate
local compressed = compress.zstd.encode(binary_data)

-- Höhere Komprimierung für Archivierung
local archived = compress.zstd.encode(data, {level = 19})

-- Schnellmodus für Echtzeit-Streaming
local fast = compress.zstd.encode(data, {level = 1})
Parameter Typ Beschreibung
data string Zu komprimierende Daten
options table? Optionale Kodierungsoptionen

Optionen {id="zstd-compress-options"}

Feld Typ Beschreibung
level integer Komprimierungsstufe 1-22 (Standard: 3)

Gibt zurück: string, error

Dekomprimieren {id="zstd-decompress"}

local decompressed, err = compress.zstd.decode(compressed_data)
if err then
    return nil, err
end
Parameter Typ Beschreibung
data string Zstandard-komprimierte Daten
options table? Optionale Dekodierungsoptionen

Optionen {id="zstd-decompress-options"}

Feld Typ Beschreibung
max_size integer Max. dekomprimierte Größe in Bytes (Standard: 128MB, Max: 1GB)

Gibt zurück: string, error

Deflate

Rohe DEFLATE-Komprimierung (RFC 1951). Wird intern von anderen Formaten verwendet.

Komprimieren {id="deflate-compress"}

local compressed = compress.deflate.encode(data, {level = 6})
Parameter Typ Beschreibung
data string Zu komprimierende Daten
options table? Optionale Kodierungsoptionen

Optionen {id="deflate-compress-options"}

Feld Typ Beschreibung
level integer Komprimierungsstufe 1-9 (Standard: 6)

Gibt zurück: string, error

Dekomprimieren {id="deflate-decompress"}

local decompressed = compress.deflate.decode(compressed)
Parameter Typ Beschreibung
data string DEFLATE-komprimierte Daten
options table? Optionale Dekodierungsoptionen

Optionen {id="deflate-decompress-options"}

Feld Typ Beschreibung
max_size integer Max. dekomprimierte Größe in Bytes (Standard: 128MB, Max: 1GB)

Gibt zurück: string, error

Zlib

DEFLATE mit Header und Prüfsumme (RFC 1950).

Komprimieren {id="zlib-compress"}

local compressed = compress.zlib.encode(data, {level = 6})
Parameter Typ Beschreibung
data string Zu komprimierende Daten
options table? Optionale Kodierungsoptionen

Optionen {id="zlib-compress-options"}

Feld Typ Beschreibung
level integer Komprimierungsstufe 1-9 (Standard: 6)

Gibt zurück: string, error

Dekomprimieren {id="zlib-decompress"}

local decompressed = compress.zlib.decode(compressed)
Parameter Typ Beschreibung
data string Zlib-komprimierte Daten
options table? Optionale Dekodierungsoptionen

Optionen {id="zlib-decompress-options"}

Feld Typ Beschreibung
max_size integer Max. dekomprimierte Größe in Bytes (Standard: 128MB, Max: 1GB)

Gibt zurück: string, error

Algorithmus auswählen

Algorithmus Am besten für Geschwindigkeit Rate Stufenbereich
gzip HTTP, breite Kompatibilität Mittel Gut 1-9
brotli Statische Assets, Text Langsam Beste 0-11
zstd Größe Dateien, Streaming Schnell Gut 1-22
deflate/zlib Low-Level, spezifische Protokolle Mittel Gut 1-9
-- HTTP-Response basierend auf 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

Fehler

Bedingung Art Wiederholbar
Leere Eingabe errors.INVALID nein
Stufe außerhalb des Bereichs errors.INVALID nein
Ungültige komprimierte Daten errors.INVALID nein
Dekomprimierte Größe überschreitet Limit errors.INTERNAL nein

Siehe Fehlerbehandlung für die Arbeit mit Fehlern.