HTTP (tłumaczone czasem jako plik , w skrócie , również ciasteczkoCiasteczka – Firefox.) – mały fragment tekstu, który serwis internetowy wysyła do przeglądarki i który przeglądarka wysyła z powrotem przy następnych wejściach na witrynę. Używane jest głównie do utrzymywania sesji np. poprzez wygenerowanie i odesłanie tymczasowego identyfikatora po logowaniu. Może być jednak wykorzystywane szerzej poprzez zapamiętanie dowolnych danych, które można zakodować jako ciąg znaków. Dzięki temu użytkownik nie musi wpisywać tych samych informacji za każdym razem, gdy powróci na tę stronę lub przejdzie z jednej strony na inną.
Zabezpieczenia przeglądarek pozwalają na odczyt jedynie z domeny, na której zostały utworzone, lub domen niższego poziomu. Czyli ustawione na witrynie w domenie „wikipedia.org” nie zostanie wysłane do „przykład.org”, ale może zostać wysłane do „pl.wikipedia.org”. Witryna ustawiająca może dodatkowo określić opcje , m.in. kiedy ono wygaśnie (np. po zamknięciu przeglądarki lub o określonej godzinie, określonego dnia), czy jest dostępne tylko poprzez zabezpieczony protokół (HTTPS) oraz czy ma być dostępne dla skryptów uruchamianych w przeglądarce (typowo JavaScript).
Mechanizm został wymyślony przez byłego pracownika Netscape Communications – Lou Montulliego, a ustandaryzowany w ramach we współpracy z Davidem M. Kristolem w 1997 roku. Bieżący standard opisuje dokument z 2011 roku. upright=2.8|thumb|Schemat działania prostego licznika internetowego
Zastosowanie różnych rodzajów są stosowane najczęściej po logowaniu do utrzymywania sesji. Mogą jednak przechowywać inne tymczasowe dane jak stan elementów na stronie, czy historię odwiedzanych poprzednio stron (na danej witrynie). Umożliwia to tworzenie spersonalizowanych serwisów WWW (np. zapamiętanie stanu menu), obsługi logowania, prostych sond i liczników, „koszyków zakupowych” w internetowych sklepach, a także tworzenie statystyk użyteczności witryny oraz badanie preferencji użytkowników.
Zastosowanie do sond i liczników internetowych może wyglądać następująco – serwer ustawia ciasteczko informujące, że z danego komputera oddano już głos lub też odwiedzono daną stronę. Na tej podstawie może wykonać odpowiednie operacje i wygenerować dla użytkownika zindywidualizowaną treść strony. Schematyczny sposób wykorzystywania ciasteczek przy obsłudze licznika internetowego, wykluczającego przeładowania (zwiększanie liczby odwiedzin przy odświeżeniu strony) przedstawiony jest poniżej:
Problemy w stosowaniu Istotne przy stosowaniu jest to, że są to dane tymczasowe – wygasają automatycznie po pewnym czasie i w każdej chwili mogą być usunięte lub zablokowane przez użytkownika. Z tego powodu trwałe dane użytkowników muszą być przechowywane po stronie serwera. Także stosowanie ciasteczka jako „zabezpieczenie” sond i liczników należy traktować jako działanie pomocnicze – wynik takiego licznika może łatwo, nawet nieświadomie, zafałszować użytkownik, który ma trwale zablokowane ciasteczka.
Dodatkowym problemem jest to, że tak naprawdę rozpoznawana jest przeglądarka internetowa, a nie konkretny użytkownik. Z tego z kolei wynikają dwa problemy: Dane zawarte w ciasteczkach nie są przenoszone między urządzeniami użytkownika. Istnieje ryzyko przejęcia danych na współdzielonym komputerze (np. w wypadku logowania się w kawiarence internetowej).
Pierwszy problem można rozwiązać zapisując kopię preferencji po stronie serwera – po zalogowaniu na innym urządzeniu dane są wysyłane ponownie i ew. łączone (synchronizacja). Drugi problem częściowo rozwiązuje mechanizm wygasania ciasteczek (domyślnie po zamknięciu przeglądarki). Dodatkowo można wprowadzić wygasanie identyfikatora sesji po stronie serwera. Użytkownik może także wyczyścić wszystkie dane w przeglądarce (w paru przeglądarkach skrótem do tej opcji jest ).
Innym ważnym problemem związanym z bezpieczeństwem jest to, że ciasteczka nie są domyślnie szyfrowane i są za każdym razem wysyłane do serwera. Z tego powodu ciasteczka nie nadają się do bezpośredniego przesyłania danych poufnych (np. hasła). Nawet w formie zaszyfrowanej jest to ryzykowne ze względu na wielokrotne przesyłanie tej samej informacji. Stąd też typowym rozwiązaniem jest wysyłanie tymczasowego identyfikatora sesji (ważnego tylko przez określony czas). Sesję można dodatkowo zabezpieczyć, przypisując identyfikator np. do konkretnego IP, które użytkownik miał w trakcie logowania lub np. grupy IP, które użytkownik określi jako bezpieczne.
Dyrektywa UE – obowiązek informacyjny Mechanizmy zarządzania w niektórych przeglądarkach są dosyć ubogie. Część przeglądarek posiada zaawansowane narzędzia, które pozwalają kontrolować, które witryny mogą przechowywać dane w ciasteczkach i pozwalają selektywnie je usuwać lub blokować. Niektóre pozwalają nawet na włączenie opcji ostrzegającej każdorazowo o ich przesyłaniu.
Także z tych powodów w 2009 roku Unia Europejska nałożyła na właścicieli witryn obowiązek informowania o tego typu praktykach (w Polsce efektywnie regulacje weszły w życie 22 marca 2013 roku, czyli dwa lata po terminie wyznaczonym przez UE). Należy pamiętać, że ciasteczka nie są jedynym możliwym mechanizmem cichego obserwowania użytkowników i nie są to tylko dane przechowywane po stronie użytkownika – w bardzo podobny sposób można wykorzystywać informacje gromadzone po stronie serwera. Wbrew czasem używanej nazwie () dyrektywa unijna dotyczy wszystkich mechanizmów używanych do gromadzenia danych o użytkownikach, a nie tylko . Z tego powodu prawnicy określają ją jako dyrektywę o prywatności (ang. )
W związku z europejskimi wytycznymi w 2013 roku znowelizowana została nieobowiązująca już ustawa Prawo Telekomunikacyjne, która swoim art. 173 nakładała obowiązek informowania o przechowywaniu i wykorzystywaniu ciasteczek. Za nieprzestrzeganie tych zasad groziła kara finansowa, która mogła zostać nałożona przez prezesa Urzędu Komunikacji ElektronicznejTechlaw.pl – Czy ostrzeżenia o ciasteczkach są konieczne?. Polska implementacja dyrektywy różniła się od niektórych modeli zagranicznych brakiem wymogu wyraźnego wyrażenia zgody i akceptacji polityki przez użytkownika końcowego. Ustawa pozostawiała pole do braku takiej zgody poprzez zmianę ustawień przeglądarki. W praktyce więc stosowane na polskich stronach ostrzeżenia o ciasteczkach pełniły charakter wyłącznie informacyjny.
Sposób działania Mechanizm został wprowadzony po to, by w bezstanowym protokole HTTP umożliwić odróżnienie osób odwiedzających dany serwis. są informacjami zapisywanymi tymczasowo na żądanie serwera lub skryptu po stronie przeglądarki użytkownika. Sam sposób zapisu danych nie jest sformalizowany i – wbrew popularnej nazwie „plik ” – pojedyncze ciasteczko nie jest zapisywane w jednym pliku na dysku. Dla przykładu Internet Explorer przechowuje wszystkie ciasteczka z danej witryny w jednym pliku, ale już Firefox i Chrome przechowują ją w bazie danych SQLite.
Standaryzowany jest jednak sposób przesyłania ciasteczek. Serwer WWW chcąc wysłać żądanie utworzenia ciasteczka na dysku użytkownika dołącza do nagłówka HTTP polecenie „Set-Cookie”, po którym następuje ciąg przekazywanych danych i opcji. Zapamiętane ciasteczko jest wysyłane jedynie do serwera z którego pochodzi, a który jest rozpoznawany przez przeglądarkę według nazwy domeny.
W danych po poleceniu Set-Cookie określone są: nazwa i przypisana jej wartość (jedyne obowiązkowe), czas ważności danego ciasteczka (po jego upłynięciu przeglądarka przestanie je wysyłać i powinna je usunąć z komputera użytkownika), opcje ograniczenia widoczności ciasteczka (domena, ścieżka i poziom zabezpieczeń).
Do zapisania wymagana jest jedynie jego nazwa i wartość. Niepodanie czasu ważności spowoduje wygaśnięcie ciasteczka po zamknięciu „sesji” (czyli zamknięciu przeglądarki). Ciasteczka, które wygasają po zakończonej sesji, zwane są ciasteczkami sesyjnymi. Pozostałe są „trwałe” w tym sensie, że po ponownym uruchomieniu przeglądarki są dalej dostępne. Nie ma jednak możliwości, by ciasteczko nie wygasło nigdy – albo wygasają z sesją, albo wraz z przekroczeniem podanego czasu. Czas ważności może być jednak bardzo odległy – nawet kilkuletni. Ciasteczka nie są też w pełni trwałe dlatego, że użytkownik może je łatwo usunąć.
Składnia nagłówka HTTP Nagłówek wysłany przez serwer ma następującą postać: Set-Cookie: nazwa=wartość; expires=DATA; path=ŚCIEŻKA; domain=DOMENA; secure nazwa=wartość Wartość ta jest jedynym wymaganym atrybutem przy wysyłaniu ciasteczka. Składa się z dowolnych znaków z wyjątkiem średników, przecinków, białych spacji i slashów (/). Jeśli zajdzie potrzeba ich użycia, najczęściej koduje się je w formacie odpowiednim dla URL (%XX), gdzie XX to kod ASCII znaku (np. %2F to zakodowana postać slasha, a %20 – spacji).
expires=data Atrybut expires informuje przeglądarkę o dacie wygaśnięcia danego ciasteczka. Gdy data ważności zostanie przekroczona, to przeglądarka nie może wysłać ciasteczka do serwera i powinna je usunąć.
Jeśli nie podano daty wygaśnięcia, to ciasteczko traci ważność z końcem sesji, czyli po zamknięciu wszystkich okien przeglądarki.
Jeśli data jest określona, to musi być podana w następującym formacie (przykład): „Tuesday, 05-Nov-2004 08:30:09 GMT”. Format ten oparty jest na , i z drobną zmianą odnośnie do separatora daty – tu występuje kreska, podana jest również strefa czasowa GMT.
domain=domena Ten parametr określa widoczność ciasteczka, to znaczy, dokąd może być ono wysłane, przy czym serwer może określić tylko swoją domenę lub domeny niższego stopnia. W momencie wywołania przez użytkownika adresu URL, przeglądarka sprawdza, czy ma ważne ciasteczka dla tej domeny (i pozostałe opcje ograniczenia widoczności).
W specyfikacji Netscape’a wprowadzone jest w tym zakresie dodatkowe ograniczenie. To znaczy domena zostanie dopasowana, jeśli zawiera minimum dwie kropki, albo minimum trzy – jeśli domena główna serwera nie jest jedną z domen specjalnych, czyli: „COM”, „EDU”, „NET”, „ORG”, „GOV”, „MIL”, „INT”. Ma to zapobiegać ustawianiu ciasteczek dla domen typu „.com”, „.edu”, czy „va.us”. Może to jednak powodować nieoczekiwane rezultaty, ponieważ ustawienie dla ciasteczka domeny w formacie „domena.org” spowoduje, że ciasteczka będę widoczne tylko dla danej domeny, ale nie będą wysyłane do domen niższego rzędu, czyli np. „forum.domena.org”. Problem ten omija się ustawiając domenę „.domena.org” – patrz pytanie 23: „”..
Domyślnie domain przyjmuje wartość domeny strony, z której wysłano żądanie zapisu ciasteczka.
path=ścieżka Atrybut path jest podawany w celu ograniczenia widoczności ciasteczka do danej ścieżki dostępu do katalogu (liczy się ścieżka widoczna w URL-u pliku, a nie rzeczywiste położenie na dysku serwera). Wszystkie strony umieszczone w tym katalogu i jego podkatalogach będą mogły je wykorzystać. Należy zauważyć, że podanie parametru path w postaci „/wiki” pozwoli na odczytanie danych z ciasteczek plikom w katalogach „/wikipedia”, „/wiki/Cookie” itp.
Widoczność ciasteczka będzie niezależna od położenia pliku, jeśli podana została ścieżka „/”. Natomiast domyślnie path przyjmuje wartość ścieżki do strony, z której wysłano żądanie zapisu ciasteczka.
secure Ten parametr nie posiada wartości. Jeśli zostanie podany, to ciasteczko będzie widoczne (wysłane) tylko wtedy, gdy połączenie będzie szyfrowane (obecnie możliwe przy użyciu protokołu HTTPS).
Przed każdym wywołaniem żądania HTTP do serwera, przeglądarka szuka ciasteczek, które jeszcze nie wygasły. Z tych ciasteczek wybierane są te, dla których domena, ścieżka i poziom zabezpieczenia zgadzają się z adresem URL strony. Jeśli coś zostanie znalezione, to nazwa i wartość (bez opcji) dołączane są do nagłówka żądania HTTP w postaci: Cookie: nazwa_ciasteczka_1=wartosc_ciasteczka_1; nazwa_ciasteczka_2=wartosc_ciasteczka_2;...
Właściwości o tej samej nazwie, ale o innych ścieżkach będą nadpisywane (zarówno w sensie wartości, jak i opcji).