Gniazda TCP są zaprojektowane tak, aby były stanowe, więc ogólnie służą do identyfikowania sesji. Dokładnie to robią protokoły takie jak SSH i ftp.
Protokół HTTP został zaprojektowany tak, aby był bezstanowy, a każde połączenie jest powiązane tylko z zasobem do pobrania. Po pobraniu zasobu gniazdo TCP, na którym jedzie żądanie HTTP, zostaje zamknięte. Pierwotnym powodem tego była prostota. Ale efektem ubocznym jest to, że serwery HTTP z nowoczesnymi stronami internetowymi mogą obsługiwać znacznie więcej użytkowników niż serwery oparte na gniazdach, takie jak SSH lub ftp.
Nie można więc używać gniazd, ponieważ HTTP zamyka gniazdo po pobraniu strony internetowej.
Oczywiście powiedzenie, że HTTP zamknie gniazdo na zasób, upraszcza rzeczy, ponieważ HTTP ma takie funkcje, jak potokowanie i trwałe połączenia, które mogą pobierać wiele zasobów na gniazdo. Ale to tylko optymalizacja. Po pobraniu wszystkiego przeglądarka zamknie gniazdo po pewnym czasie.
HTTP został pierwotnie zaprojektowany jako prosty protokół do pobierania plików HTML. Stare przeglądarki mogą również pobierać pliki HTML z innych protokołów, takich jak Gopher i ftp. W związku z tym nie było powodu, aby HTTP był stanowy, ponieważ pliki HTML są zwykłymi plikami tekstowymi.
Po wprowadzeniu formularzy internetowych i stron HTML może przesyłać dane z powrotem na serwer strony internetowe zaczęły potrzebować sesji. W ten sposób pliki cookie zostały utworzone w celu ponownego wprowadzenia stanu do bezstanowego protokołu przesyłanego przez stanową warstwę przesyłania przesyłaną przez bezstanową warstwę sieciową. Zatem pełne warstwy aplikacji to:
- Ethernet, Wi-Fi itp. = Bezstanowy
- IP = bezpaństwowiec
- TCP = stanowy
- HTTP = bezstanowy
- Pliki cookie HTTP + = stanowe
Obecnie mamy gniazda sieciowe, które mogą przechowywać pojedyncze otwarte gniazdo ze strony internetowej na serwer. Dzięki websockets możesz ponownie użyć gniazd do identyfikacji użytkownika, ponieważ sam websocket jest stanowy. Ale w większości przypadków nadal potrzebujesz pliku cookie dla głównej strony HTML, która ładuje javascript, który uruchamia websocket.