Zadano kolejne pytanie dotyczące wykorzystania adresów IP do identyfikacji poszczególnych klientów. Myślę, że rozumiem, dlaczego adres IP jest niewystarczający. Ale co z gniazdem, które ma więcej informacji iz tego, co rozumiem, jest stanowe? Czy nie można tego potencjalnie wykorzystać zamiast pliku cookie?
17
Odpowiedzi:
Gniazdo identyfikuje połączenie . Pliki cookie są zwykle używane do identyfikacji użytkownika . Jeśli otworzę dwie karty przeglądarki do SE.SE, będę miał dwa połączenia, a zatem dwa gniazda. Ale chcę, aby moje ustawienia pozostały w obu z nich. (W rzeczywistości przeglądarka zwykle otwiera wiele gniazd dla jednej strony, aby przyspieszyć ładowanie strony; uważam, że większość przeglądarek ma domyślną maksymalną wartość od 4 do 10 gniazd na stronę).
I odwrotnie może się zdarzyć: jeśli zamknę kartę przeglądarki, inny użytkownik na komputerze może otworzyć kartę przeglądarki do SE.SE i może uzyskać tę samą poczwórność (source_ip, source_port, target_ip, target_port), w którym to przypadku , dostanie wszystkie moje ustawienia.
źródło
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:
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.
źródło