Czym jest kompresja GZIP?
GZIP to bezstratny format kompresji plików zdefiniowany przez RFC 1952. Opakowuje on ładunek wytworzony przez algorytm DEFLATE (RFC 1951), który łączy odniesienia wsteczne LZ77 z kodowaniem Huffmana, aby skompresować powtarzające się dane do zwartego strumienia bajtów.
Jak działa kompresja GZIP?
Twoje dane wejściowe są przetwarzane w całości w przeglądarce za pomocą natywnego API CompressionStream('gzip'). Główne kroki to:
- Narzędzie konwertuje tekst lub plik na strumień bajtów (UTF-8 dla danych tekstowych).
- Te bajty są przepuszczane przez
CompressionStreamskonfigurowany dla formatugzip. - Przeglądarka stosuje DEFLATE: przejście LZ77 z ruchomym oknem znajduje powtarzające się sekwencje, a kodowanie Huffmana przypisuje krótsze kody częstym symbolom.
- Wokół ładunku DEFLATE owijany jest 10-bajtowy nagłówek gzip i 8-bajtowa stopka (CRC32 oryginalnych danych plus oryginalna długość modulo 2^32), tworząc standardowy kontener .gz.
- Wynik jest renderowany jako Base64 lub szesnastkowy dla danych tekstowych lub oferowany jako pobieralny plik .gz dla danych binarnych.
Dlaczego kompresować za pomocą GZIP?
- Mniejsze ładunki: tekst, JSON, HTML, CSS i kod źródłowy zwykle kurczą się do ułamka pierwotnego rozmiaru.
- Standard branżowy: GZIP jest rozumiany przez praktycznie każdy serwer HTTP, CDN, przeglądarkę, narzędzie archiwizujące i bibliotekę standardową języków programowania.
- Prywatność: kompresja odbywa się w całości w przeglądarce. Dane wejściowe nigdy nie trafiają na nasze serwery.
- Gotowe na podróż w obie strony: wynik dekompresuje się z CLI
gunzip, z nagłówkiem HTTPContent-Encoding: gziporaz z dowolnym czytnikiem RFC 1952 w Pythonie, Node.js, Go, Javie czy Ruście.
Jakie są typowe zastosowania kompresji GZIP?
GZIP jest używany w całym internecie i w narzędziach wiersza poleceń:
- Transfer HTTP: serwery webowe kompresują odpowiedzi GZIP, dzięki czemu strony ładują się szybciej w sieci.
- Archiwizacja logów: długoterminowe logi serwera są przechowywane jako pliki .gz w celu zmniejszenia zużycia dysku.
- Kopie zapasowe i pakiety: tarballe (.tar.gz) kompresują całe drzewa katalogów do przenośnej dystrybucji.
Jak wygląda przykład kompresji GZIP?
Dokument JSON o rozmiarze 1 KB z wieloma powtarzającymi się nazwami pól zazwyczaj kompresuje się do około 200–300 bajtów — czterokrotne do pięciokrotne zmniejszenie rozmiaru. Duże logi tekstowe często kompresują się o 90% lub więcej. Dane wejściowe już skompresowane (JPEG, PNG, MP4, ZIP) nie skurczą się dalej i mogą nawet urosnąć o kilka bajtów przez ramki GZIP.
Ten kompresor GZIP wytwarza standardowy wynik RFC 1952 bezpośrednio w przeglądarce. Niezależnie od tego, czy zmniejszasz ładunek przed transmisją, czy tworzysz plik .gz do archiwizacji, wynik współdziała z każdym narzędziem obsługującym GZIP w sieci.