Stan HTTP i ciasteczka
Protokół transferu hipertekstu (HTTP) jest bezstanowym protokołem na poziomie aplikacji. traktuje każde żądanie jako osobną wymianę. Serwer może przechowywać dane aplikacji, lecz HTTP nie wymaga przenoszenia tego stanu z jednego żądania do kolejnego.
Bezstanowa obsługa żądań upraszcza równoważenie obciążenia, ponieważ kolejne żądanie nie musi trafić do tego samego procesu serwera. Aplikacja nadal potrzebuje sposobu powiązania żądania z koszykiem, logowaniem lub preferencją. Sklep może użyć identyfikatora sesji dla koszyka, a serwis społecznościowy dla sesji logowania.
przenosi taki identyfikator między żądaniami. Serwer może użyć identyfikatora do pobrania danych sesji, a samo ciasteczko pozostaje ograniczoną nazwą i wartością obsługiwaną przez przeglądarkę.
Wymiana ciasteczek w HTTP
Obsługa stanu ciasteczka korzysta z pola odpowiedzi Set-Cookie oraz pola żądania Cookie. Przeglądarka sprawdza, czy zapisane ciasteczko pasuje do hosta, ścieżki, trybu bezpieczeństwa i własnego czasu życia.
- Krok 1: Serwer ustawia ciasteczko
Po otrzymaniu żądania HTTP serwer może wysłać w odpowiedzi identyfikator sesji. Pole
Set-Cookieokreśla nazwę, wartość i opcjonalne atrybuty ciasteczka.Pola odpowiedzi serwera
HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: sessionid=abf892kds9; Expires=Wed, 21 Oct 2026 07:28:00 GMT - Krok 2: Przeglądarka przechowuje ciasteczko
Przeglądarka przetwarza pole
Set-Cookiei przechowuje nazwę oraz wartość wraz z domeną, ścieżką, czasem życia i atrybutami bezpieczeństwa. W przykładziesessionid=abf892kds9jest powiązane zexample.com. - Krok 3: Przeglądarka wysyła pasujące ciasteczko
Przy kolejnym żądaniu, które pasuje do zakresu i reguł bezpieczeństwa ciasteczka, przeglądarka umieszcza nazwę i wartość w polu
Cookie. Ciasteczko nie jest wysyłane do każdego hosta przy każdym żądaniu.Pola żądania klienta
GET /produkty/123 HTTP/1.1
Host: www.example.com
Cookie: sessionid=abf892kds9 - Krok 4: Serwer odczytuje sesję
Serwer odczytuje pole
Cookiei używa identyfikatora jako klucza do danych sesji, takich jak stan logowania lub zawartość koszyka. Aplikacja generuje następnie odpowiedź dla tej sesji.
Przeglądarka używa atrybutów ciasteczka przy decyzji o dopasowaniu. Pole żądania Cookie zawiera zwykle nazwy i wartości, dlatego serwer nie odczyta z niego samodzielnie czasu wygaśnięcia, ścieżki ani atrybutów Secure i HttpOnly. Aplikacja powinna traktować wartość jako dane wejściowe i sprawdzać powiązaną sesję po stronie serwera.
Zakres i przeznaczenie ciasteczek
Zachowanie ciasteczka opisuje się zwykle przez czas życia i zakres. Serwer przekazuje atrybuty, a przeglądarka stosuje je podczas zapisu i wysyłania ciasteczka.
Czas życia
- Ciasteczka sesyjne
- Te ciasteczka nie mają atrybutu
ExpiresaniMax-Age. Przeglądarka przechowuje je do końca swojej sesji, przy czym znaczenie sesji ustala sama przeglądarka. Przywracanie sesji przez przeglądarkę może zmienić moment usunięcia takiego ciasteczka. Ciasteczko sesyjne może utrzymywać logowanie lub koszyk podczas wizyty. - Ciasteczka trwałe
- Te ciasteczka mają czas życia ustawiony za pomocą
ExpireslubMax-Age. Przeglądarka przechowuje je do upływu tego czasu, usunięcia przez użytkownika, zastąpienia innym ciasteczkiem albo usunięcia przez własny mechanizm zarządzania pamięcią. Mogą zachowywać język, motyw lub preferencję logowania między wizytami.
Zakres witryny
- Ciasteczka pierwszej strony (first-party)
- Ciasteczko pierwszej strony działa w kontekście witryny, którą użytkownik odwiedza. Na przykład ciasteczko sesyjne ustawione przez
example.compodczas odwiedzania tej witryny należy do jej kontekstu pierwszej strony. Jego przeznaczenie zależy od aplikacji, na przykład może dotyczyć logowania albo preferencji. - Ciasteczka trzeciej strony (third-party)
- Ciasteczko trzeciej strony działa w kontekście, w którym witryna powiązana z ciasteczkiem różni się od witryny najwyższego poziomu. Usługa osadzona na
example.com, na przykład przycisk społecznościowy „Lubię to” albo komponent reklamowy, może żądać takiego ciasteczka dla własnej domeny. Ustawienia użytkownika, polityka przedsiębiorstwa i ograniczenia przeglądarki mogą blokować te ciasteczka, dlatego aplikacja powinna obsłużyć ich brak.
Atrybuty ciasteczek i zakres żądań
Pole odpowiedzi Set-Cookie może zawierać atrybuty ograniczające czas życia, zakres hosta, zakres ścieżki, transport i widoczność dla skryptów.
Set-Cookie: nazwa=wartosc; Expires=data; Path=/; Domain=.example.com; Secure; HttpOnly; SameSite=Strict- Expires i Max-Age
Expiresokreśla bezwzględną datę i godzinę wygaśnięcia.Max-Ageokreśla czas życia w sekundach od odebrania pola. Gdy oba atrybuty występują razem, pierwszeństwo maMax-Age. Względny czas życia ogranicza zależność od zegara klienta używanego do interpretacji daty bezwzględnej.- Domain
- Ten atrybut określa hosty, które mogą otrzymywać ciasteczko. Po pominięciu atrybutu ciasteczko jest związane tylko z hostem źródłowym. Przy
Domain=.example.compoczątkowa kropka jest ignorowana, a ciasteczko może pasować doexample.comi jego subdomen, takich jakapi.example.comorazblog.example.com, zgodnie z regułami przeglądarki. - Path
- Ten atrybut ogranicza ścieżki żądań, dla których przeglądarka wysyła pole
Cookie. PrzyPath=/adminpasuje żądanie do/admin/dashboard, a żądanie do/homenie pasuje. Zakres ścieżki nie tworzy granicy dostępu dla aktywnego skryptu z tego samego źródła. - Secure
- Gdy ten atrybut występuje, przeglądarka wysyła ciasteczko tylko przez bezpieczny kanał, zwykle HTTPS z TLS. Chroni on poufność podczas przesyłania, lecz nie chroni integralności ciasteczka przed każdym aktywnym atakiem sieciowym. Identyfikatory sesji powinny używać atrybutu
Secure. - HttpOnly
- Gdy ciasteczko ma atrybut
HttpOnly, interfejsy skryptowe przeglądarki go nie udostępniają. Ogranicza to kradzież ciasteczka w części ataków , lecz wstrzyknięty skrypt nadal może wysyłać żądania jako użytkownik. Ciasteczko sesyjne powinno łączyć ten atrybut z innymi zabezpieczeniami. - SameSite
- Ten atrybut ogranicza wysyłanie ciasteczka z żądaniami międzystronowymi i może zmniejszyć część ataków . Ma trzy wartości:
Strict: Ciasteczko jest pomijane przy żądaniach międzystronowych, także przy nawigacji najwyższego poziomu z innej witryny.Lax: Ciasteczko jest wysyłane przy żądaniach w tej samej witrynie oraz przy wybranych nawigacjach międzystronowych najwyższego poziomu z bezpiecznymi metodami. Przeglądarka może stosować reguły równoważne Lax po pominięciu atrybutu.None: Ciasteczko może być wysyłane w kontekście międzystronowym. Ta wartość wymaga atrybutuSecurei służy przepływom osadzonym albo federacyjnym, które potrzebują dostępu międzystronowego.
Ciasteczko może przechowywać identyfikator sesji albo dane aplikacji, lecz mechanizm ciasteczek nie określa znaczenia tej wartości. Wrażliwy stan warto przechowywać na serwerze albo zabezpieczyć dane po stronie klienta odpowiednią ochroną integralności i poufności. Atrybuty zakresu ograniczają ekspozycję przy zwykłych żądaniach, a kontrola uprawnień pozostaje zadaniem aplikacji.
Prywatność i polityki przeglądarek dotyczące ciasteczek
Ciasteczka mogą identyfikować przeglądarkę między żądaniami, a ciasteczko używane w wielu kontekstach witryn może ułatwiać śledzenie międzystronowe. Ciasteczka śledzące stron trzecich budzą więc obawy o prywatność, szczególnie gdy usługi reklamowe lub analityczne łączą identyfikatory z wielu witryn.
Obowiązki dotyczące zgody i informacji zależą od jurysdykcji oraz przeznaczenia ciasteczka. Producenci przeglądarek ograniczają także dostęp międzystronowy przez ustawienia, partycjonowanie pamięci, ochronę przed śledzeniem i inne polityki:
- Polityki ciasteczek stron trzecich: Safari domyślnie blokuje ciasteczka stron trzecich. Firefox domyślnie blokuje ciasteczka śledzące międzystronowo i może izolować inne ciasteczka międzystronowe. Chrome zachowuje ustawienia użytkownika dotyczące ciasteczek stron trzecich, dlatego działanie zależy od ustawień i trybu pracy. Witryna zależna od ciasteczek stron trzecich musi obsłużyć użytkowników, którzy je blokują.
- Ochrona przed śledzeniem: Przeglądarki mogą ograniczać przechowywanie danych przez trackery i żądania międzystronowe, także przy wybranych zastosowaniach ciasteczek pierwszej strony. Dokładne działanie zależy od przeglądarki, ustawień i rozpoznanego kontekstu.
Ciasteczka pierwszej strony pozostają użyteczne dla sesji i preferencji, a dostępność ciasteczek stron trzecich zależy od przeglądarki i decyzji użytkownika. Dokumentacja Privacy Sandbox opisuje interfejsy dla wybranych zastosowań, takich jak logowanie federacyjne, sygnały antyfraudowe i pomiar reklam. Ich dostępność i cykl życia zależą od polityki przeglądarki, dlatego aplikacja powinna określać działanie dla sytuacji, w której interfejsy lub ciasteczka są dostępne, oraz dla sytuacji, w której zostały zablokowane.