Komprimieren und dekomprimieren Sie Daten mit gzip, deflate, zlib, brotli und zstd-Algorithmen.
local compress = require ( " compress " )
Am weitesten verbreitetes Format (RFC 1952).
-- Für HTTP-Response komprimieren
local body = json . encode ( large_response )
local compressed , err = compress .gzip. encode ( body )
-- Content-Encoding-Header setzen
res : set_header ( " Content-Encoding " , " gzip " )
-- 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 datastring Zu komprimierende Daten optionstable? Optionale Kodierungsoptionen
Feld Typ Beschreibung levelinteger Komprimierungsstufe 1-9 (Standard: 6)
Gibt zurück: string, error
-- HTTP-Request dekomprimieren
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 " )
-- Dekomprimieren mit Größenbegrenzung (Zip-Bomben verhindern)
local decompressed , err = compress .gzip. decode ( data , { max_size = 10 * 1024 * 1024 })
return nil , errors . new ( " INVALID " , " Decompressed size exceeds 10MB limit " )
Parameter Typ Beschreibung datastring GZIP-komprimierte Daten optionstable? Optionale Dekodierungsoptionen
Feld Typ Beschreibung max_sizeinteger Max. dekomprimierte Größe in Bytes (Standard: 128MB, Max: 1GB)
Gibt zurück: string, error
Beste Komprimierungsrate für Text (RFC 7932).
-- 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 datastring Zu komprimierende Daten optionstable? Optionale Kodierungsoptionen
Feld Typ Beschreibung levelinteger Komprimierungsstufe 0-11 (Standard: 6)
Gibt zurück: string, error
local decompressed , err = compress .brotli. decode ( compressed_data )
local decompressed = compress .brotli. decode ( data , { max_size = 50 * 1024 * 1024 })
Parameter Typ Beschreibung datastring Brotli-komprimierte Daten optionstable? Optionale Dekodierungsoptionen
Feld Typ Beschreibung max_sizeinteger Max. dekomprimierte Größe in Bytes (Standard: 128MB, Max: 1GB)
Gibt zurück: string, error
Schnelle Komprimierung mit guten Raten (RFC 8878).
-- 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 datastring Zu komprimierende Daten optionstable? Optionale Kodierungsoptionen
Feld Typ Beschreibung levelinteger Komprimierungsstufe 1-22 (Standard: 3) dictstring? Zstd-Dictionary-Bytes aus train_dict (Standard: keine)
Gibt zurück: string, error
local decompressed , err = compress .zstd. decode ( compressed_data )
Parameter Typ Beschreibung datastring Zstandard-komprimierte Daten optionstable? Optionale Dekodierungsoptionen
Feld Typ Beschreibung max_sizeinteger Max. dekomprimierte Größe in Bytes (Standard: 128MB, Max: 1GB) dictstring? Zstd-Dictionary-Bytes (muss mit dem zum Kodieren verwendeten Dictionary übereinstimmen)
Gibt zurück: string, error
Trainieren Sie ein Dictionary aus Beispieldaten, um die Komprimierung vieler kleiner, ähnlicher Payloads zu verbessern. Geben Sie das trainierte Dictionary als Option dict an encode/decode weiter — für beide muss dasselbe Dictionary verwendet werden.
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 })
Parameter Typ Beschreibung samplesstring[] Trainingsbeispiele (mindestens eines >= 8 Bytes) optionstable? size (integer, Ziel-Dictionary-Bytes, 256-1048576, Standard 114688), id (integer, Standard 0), level (integer, 1-22)
Gibt zurück: string, error (die Dictionary-Bytes)
Parameter Typ Beschreibung dictstring Dictionary-Bytes
Gibt zurück: table, error — {id: integer, content_size: integer}
Rohe DEFLATE-Komprimierung (RFC 1951). Wird intern von anderen Formaten verwendet.
local compressed = compress .deflate. encode ( data , { level = 6 })
Parameter Typ Beschreibung datastring Zu komprimierende Daten optionstable? Optionale Kodierungsoptionen
Feld Typ Beschreibung levelinteger Komprimierungsstufe 1-9 (Standard: 6)
Gibt zurück: string, error
local decompressed = compress .deflate. decode ( compressed )
Parameter Typ Beschreibung datastring DEFLATE-komprimierte Daten optionstable? Optionale Dekodierungsoptionen
Feld Typ Beschreibung max_sizeinteger Max. dekomprimierte Größe in Bytes (Standard: 128MB, Max: 1GB)
Gibt zurück: string, error
DEFLATE mit Header und Prüfsumme (RFC 1950).
local compressed = compress .zlib. encode ( data , { level = 6 })
Parameter Typ Beschreibung datastring Zu komprimierende Daten optionstable? Optionale Kodierungsoptionen
Feld Typ Beschreibung levelinteger Komprimierungsstufe 1-9 (Standard: 6)
Gibt zurück: string, error
local decompressed = compress .zlib. decode ( compressed )
Parameter Typ Beschreibung datastring Zlib-komprimierte Daten optionstable? Optionale Dekodierungsoptionen
Feld Typ Beschreibung max_sizeinteger Max. dekomprimierte Größe in Bytes (Standard: 128MB, Max: 1GB)
Gibt zurück: string, error
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 ))
Bedingung Art Wiederholbar Leere Eingabe errors.INVALIDnein Stufe außerhalb des Bereichs errors.INVALIDnein Ungültige komprimierte Daten errors.INVALIDnein Dekomprimierte Größe überschreitet Limit errors.INTERNALnein
Siehe Fehlerbehandlung für die Arbeit mit Fehlern.