Ciasteczka pozwalają na wprowadzenie stanu w bezstanowym protokole HTTP. Sporo o nich wiemy ale tylko powierzchownie. W jaki sposób działają i po co zostały wprowadzone?
Właściwię nie boję się nieznanego. Tylko trochę szkoda mi tracić to, co znam.
Cześć 🙂
W dzisiejszym artykule, bardziej w takiej wersji mini ale z kluczowymi informacjami (podlinkowałem przydatne artykułu na końcu wpisu do tego czego nie udało mi się ująć):
Czym są ciasteczka
Ciasteczka są źródłem informacji przechowywanym w przeglądarce w postaci par klucz-wartość. Są zaprojektowane tak, aby móc w nich trzymać niewielką ilość danych. Dlaczego niewielką? Bo przy każdym żądaniu do serwera, ciasteczka też są wysyłane. Gdyby ciasteczka posiadały zbyt wiele informacji, mogłoby to wpłynąć negatywnie na wydajność.
Założenie mechanizmu ciasteczek jest proste – zapisanie danych w przeglądarce klienta, które przy kolejnej wizycie danej strony można użyć ponownie. Dobrym przykładem może być zapamiętanie preferencji użytkownika (czcionka w aplikacji, tło, itp) lub też – coś co jest wykorzystywane przez chyba wszystkich – przetrzymywanie identyfikatora sesji użytkownika (
Ciasteczka są 'publiczne’. W dowolnym momencie można podejrzeć jakie pary klucz-wartość są używane przez dany serwis, dlatego ważne jest aby nie umieszczać tam danych wrażliwych! Nawet jeżeli są to dane zaszyfrowane – istnieje szansa, że ktoś to wykradnie a później będzie próbował te dane odszyfrować.
Jak działają ciasteczka
Jak już wspomniałem w pierwszym akapicie, ciasteczka są niewielkim źródłem informacji. Co to znaczy? Mówi się, że jedno ciasteczko nie powinno przekraczać rozmiaru 4 KB danych. To wcale nie oznacza, że nie możesz utworzyć większego ciasteczka, choć w większości przypadków tak właśnie będzie! Na tej stronie w sekcji Limits Per Browser znajdziesz ciekawą tabelę z opisem na jakiej przeglądarce jakie są limity.
Ciasteczka mogą być ustawiane zarówno po stronie klienta (na froncie) i serwera (backendzie). Co się stanie jak takie ciasteczko zostanie stworzone? W przeglądarce Google Chrome, używane ciasteczka możesz podejrzeć w dev toolsach (F12 -> Application -> Cookies).
Protokół http jest bezstanowy a ciasteczka klienta należa do… klienta, oznacza to, że to klient powinien w jakiś sposób je przetrzymywać. I tak właśnie jest! Przeglądarka to tylko i aż aplikacja. Każde ciasteczko zapisywane jest na dysku, np. w przypadku przeglądarki Google Chrome jest to plik Cookies (C:\Users\<nazwa_uzytkownikae>\AppData\Local\Google\Chrome\User Data\Default\). Cookies jest bazą danych SQLite. Każde ciasteczko zapiswane jest jako nowy wiersz. Co jest istotne – zapisane wartości ciasteczek są zaszyfrowane (źródło).
Ciasteczka w pigułce
Wszystko co powinieneś wiedzieć o ciasteczkach w wielkim skrócie
- aby wspierać większość przeglądarek nie powinno się używać więcej niż 50 ciasteczek na domenę (źródło)
- ciasteczko nie powinno mieć więcej niż 4KB danych
- ciasteczka o tej samej ścieżce i nazwie będą nadpisywać się nawzajem, przy czym zapisane będzie najnowsze ciasteczko
- ciasteczka z tą samą nazwą w tej samej domenie ale innej ścieżce nie są nadpisywane – traktowane są jako dwa osobne ciasteczka!
- wysyłając ciasteczka o tej samej nazwie ale innych ścieżkach do serwera, ciasteczko z konkretniej zdefiniowaną ściężką zostanie wysłane przed ciasteczkiem z ścieżką ogólną
- ciasteczka są wysyłane do serwera jeżeli spełniają określone kryteria
- jeżeli ciasteczko ma ustawioną opcję secure na true, to takie ciasteczko zostanie wysłane tylko jeżeli używany jest protokół HTTPS
- jeżeli ciasteczko ma ustawioną wartość opcję path na jakąś konkretną ścieżkę a wysyłamy żadanie do strony ogólnej to takie ciasteczko nie zostanie wysłane do serwera
Podsumowanie
Ciasteczka to sprytny mechanizm, który moim zdaniem wprowadza stan do tego bezstanowego życia protokołu http :D. Nie poruszyłem w tym artykule wielu kwesti, takich jak ustawianie konkretnych flag na ciasteczku, kiedy jakiej używać i do czego służą. Zostawię Ci dosłownie 2 linki, w których są konkrety opisane fajnie i zwięźle:
- Understanding Cookies – po swojsku opisane jak działają ciasteczka
Using HTTP cookies – dokumentacja konkretnych flag
Za tydzień
Tak jak obiecałem w jednym z komentarzy, wrócimy do narzędzia JMeter i będziemy testować odpowiedzi serwera.