Wszystkie artykuły

Gzip + Base64: kompresja danych do przesyłania jako tekst

Gzip i Deflate to algorytmy kompresji, które zmniejszają rozmiar danych, ale wynik jest binarny, nie tekstowy. Jeśli te skompresowane dane muszą przejść przez kanał przeznaczony dla tekstu (URL, ciasteczko, pole JSON), są dodatkowo kodowane w Base64 — stąd para „Gzip/Deflate ↔ Base64", której używają narzędzia pakujące cały stan aplikacji w link do udostępnienia.

Dlaczego mocno odmieniana polszczyzna wciąż dobrze się kompresuje

Polski ma rozbudowaną fleksję — jeden rzeczownik może przybierać kilkanaście form w zależności od przypadka i liczby, a diakrytyki (ą, ć, ę, ł, ń, ó, ś, ź, ż) zajmują w UTF-8 2 bajty zamiast 1. Mimo to długi polski tekst kompresuje się zaskakująco dobrze, bo końcówki fleksyjne i przedrostki powtarzają się w tekście bardzo regularnie — a to właśnie te powtórzenia Deflate zamienia na krótsze odwołania, rekompensując koszt diakrytyków.

Typowa kolejność operacji

  1. Oryginalny tekst jest kompresowany za pomocą Gzip lub Deflate — rozmiar się zmniejsza.
  2. Skompresowany wynik binarny jest kodowany w Base64 — rozmiar nieco rośnie z powrotem, ale dane stają się tekstem.
  3. Otrzymany ciąg jest bezpiecznie przesyłany kanałem tekstowym.

Dekodowanie przebiega w odwrotnej kolejności: najpierw Base64 → dane binarne, potem dekompresja Gzip/Deflate → oryginalny tekst.

Typowe zastosowania

  • Zapakowanie całego stanu aplikacji w adresie URL, tak by udostępniony link otwierał dokładnie ten sam widok.
  • Przechowywanie skompresowanych danych w ciasteczku lub polu tekstowym bazy danych.
  • Debugowanie: rozpakowanie i odczytanie treści zakodowanej w ten sposób przez zewnętrzny system lub API.

Gzip kontra „surowy" Deflate

Gzip to w istocie format-otoczka wokół algorytmu Deflate: dodaje własny nagłówek i sumę kontrolną (CRC32) ponad skompresowane dane. „Surowy" Deflate nie ma tych dodatkowych bajtów, więc wynik jest nieco bardziej kompaktowy, ale nie da się go rozpakować narzędziem gzip bez jawnego wskazania, że to właśnie format raw. Pomylenie tych dwóch wariantów to częsta przyczyna błędu „invalid header" przy próbie rozpakowania danych.

Wypróbuj narzędzie