Internetowe ciasteczka: słodka historia, której nie znasz
Gwiazdkowa niespodzianka w nazwie: dlaczego Twoja przeglądarka pamięta o ciasteczkach
Wyobraź sobie taką scenę: siedzisz w kawiarni, a obok programista zamawia kawę. Widzi na ladzieciasteczka i pyta kelnerkę: „Czy te ciasteczka obsługują sesję?". Nie, to nie jest żart. On naprawdę próbuje zrozumieć, czy słodkości mogą przechowywać dane między kolejnymi odwiedzinami strony.
Ta zabawna konfuzja między deserem a programowaniem nie jest przypadkowa. Opowiada historię o tym, jak internet nauczył się zapamiętywać.
Amnezja, której nikt nie zamawiał
Mało kto zdaje sobie sprawę z tego, co dzieje się za każdym razem, gdy klikasz link lub wysyłasz formularz. Twoja przeglądarka wysyła do serwera zupełnie świeże żądanie. Serwer nie ma wbudowanej pamięci — nie pamięta, że trzy sekundy temu zalogowałeś się na konto, dodałeś produkt do koszyka ani że wybrałeś język polski.
To nie jest błąd. HTTP został zaprojektowany jako protokół bezstanowy. Każde żądanie musi zawierać wszystkie potrzebne mu informacje. Dla serwera jesteś zupełnie obcą osobą — nie wie, że to ten sam użytkownik, który chwilę wcześniej kliknął „Dodaj do koszyka". Poprzednie żądanie i obecne to dla niego zupełni obcy ludzie na dworcu.
Dla prostych stron z dokumentami statycznymi taki model sprawdzał się świetnie. Ale współczesny internet chciał czegoś więcej: koszyków zakupowych, spersonalizowanych paneli, zapamiętanych logowań. I wtedy amnezja protokołu stała się poważnym problemem.
Stan, czyli pamięć, której brakowało
Stan to po prostu informacja z przeszłych działań, która wpływa na to, co wydarzy się teraz. Dodajesz klawiaturę do koszyka — stan się zmienia: teraz jest tam klawiatura. Przechodzisz do kasy, serwer musi odczytać ten stan, żeby doliczyć klawiaturę do rachunku.
Stan może żyć w różnych miejscach — w pamięci operacyjnej, w bazie danych, w samej przeglądarce. Prawdziwe pytanie brzmi: jak połączyć osobne żądania w spójną historię?
Sesje: nitka łącząca światy
Sesja to logiczny pojemnik, który grupuje wiele odizolowanych żądań HTTP w jeden ciągły ciąg. Możesz myśleć o niej jak o fabule łączącej pojedyncze wizyty na stronie. Sesja może trwać od momentu zalogowania do wylogowania, albo być anonimową podróżą przez sklep internetowy bez zakładania konta.
Kluczowa sprawa: HTTP nie tworzy sesji automatycznie. To aplikacja decyduje, kiedy sesja się zaczyna, co zawiera i kiedy się kończy. Jeden użytkownik może mieć pięć aktywnych sesji w różnych zakładkach i jest to całkowicie normalne.
Problem z tożsamością
Tu robi się ciekawie. Serwer obsługuje miliony aktywnych sesji jednocześnie. Gdy przychodzi nowe żądanie, musi odpowiedzieć na kluczowe pytanie: „Do kogo należy ta sesja?".
Rozwiązaniem jest identyfikator sesji — unikalny znacznik wyróżniający twoją sesję spośród wszystkich innych. Nie musi być sensowny ani powiązany z prawdziwą tożsamością. Może być losowym ciągiem znaków w stylu 7f41c0a9 albo sesja_88293847. Liczy się tylko to, że serwer może go użyć, by odnaleźć odpowiednie dane.
Identyfikator to nie same dane — to klucz wyszukiwania. Serwer pyta: „Daj mi dane sesji zapisane pod 7f41c0a9" — i nagle twoja klawiatura znów pojawia się w koszyku.
Ciasteczka: kurier odpowiedzialny za dostawę
Zostaje jeszcze jedna zagadka: jak ten identyfikator ma podróżować wraz z każdym żądaniem?
Serwer nie może polegać na sobie — każde żądanie może trafić do innej instancji serwera. Przeglądarka musi przechować identyfikator i odsyłać go automatycznie przy każdej okazji.
I właśnie tym zajmują się cookies. Serwer wysyła do przeglądarki niewielki fragment danych — zazwyczaj parę nazwa-wartość. Przeglądarka zapisuje ją i z każdym kolejnym żądaniem odsyła z powrotem. Cookies stały się pamięcią internetu.
Dlaczego właśnie „ciasteczko"?
Tu zaczyna się historia, której dokładnie nikt nie zna. Termin prawdopodobnie wywodzi się od „magic cookie" — koncepcji z Uniksa, gdzie token lub wartość przekazywano między programami. Czy developer z Netscape naprawdę był głodny podczas implementacji tej funkcji, czy po prostu docenił humor środowiska Unixowego — tego już się nie dowiemy.
Wiemy za to, że wybrali termin, który sprawia, że każdy początkujący programista zaczyna swoją przygodę z wyszukiwaniem od zdjęć ciasteczek z czekoladą zamiast dokumentacji. Może to programistyczny żart, a może po prostu nie docenili, ile osób wpisze w Google „ciasteczka z czekoladą przepis".
Tak czy inaczej, następnym razem, gdy zobaczysz na stronie „Akceptuję ciasteczka", będziesz wiedział, że nie tylko wyrażasz zgodę na śledzenie. Bierzesz udział w sprytnym obejściu, które zmieniło bezstanowy internet w coś, co naprawdę cię pamięta.
W NameOcean pomagamy startupom i programistom budować obecność w sieci — od rejestracji domeny po hosting. Bo czasem zrozumienie ciasteczek to nie wszystko. Potrzebujesz jeszcze infrastruktury, która je wykorzysta.