Eine weitere Frage betraf die Verwendung von IP-Adressen zur Identifizierung einzelner Clients. Ich denke, ich verstehe, warum eine IP-Adresse nicht ausreicht. Aber was ist mit der Steckdose, die mehr Informationen enthält und, soweit ich das verstehe, zustandsbehaftet ist? Könnte das nicht potenziell anstelle eines Cookies verwendet werden?
17
Antworten:
Ein Socket identifiziert eine Verbindung . Cookies werden normalerweise verwendet, um einen Benutzer zu identifizieren . Wenn ich zwei Browser-Tabs zu SE.SE öffne, habe ich zwei Verbindungen und damit zwei Sockets. Ich möchte jedoch, dass meine Einstellungen für beide beibehalten werden. (Normalerweise öffnet ein Browser mehrere Sockets für eine Seite, um die Ladezeit der Seite zu verkürzen. Ich glaube, die meisten Browser haben einen Standard-Maximalwert zwischen 4 und 10 Sockets pro Seite.)
Und das Gegenteil kann auch passieren: Wenn ich meinen Browser-Tab schließe, öffnet ein anderer Benutzer auf dem Computer möglicherweise einen Browser-Tab für SE.SE und erhält in diesem Fall möglicherweise dasselbe Vierfache von (source_ip, source_port, target_ip, target_port) Er wird alle meine Einstellungen bekommen.
quelle
TCP-Sockets sind so konzipiert, dass sie einen Status aufweisen, sodass sie im Allgemeinen zur Identifizierung von Sitzungen verwendet werden. Protokolle wie SSH und FTP machen genau das.
HTTP ist so konzipiert, dass es keinen Status hat, und jede Verbindung ist nur mit einer herunterzuladenden Ressource verknüpft. Nachdem eine Ressource heruntergeladen wurde, wird der TCP-Socket geschlossen, auf dem die HTTP-Anforderung ausgeführt wird. Der ursprüngliche Grund dafür war die Einfachheit. Der Nebeneffekt ist jedoch, dass HTTP-Server, auf denen moderne Websites ausgeführt werden, weit mehr Benutzer verarbeiten können als Socket-basierte Server wie SSH oder FTP.
Sockets können daher nicht verwendet werden, da HTTP den Socket nach dem Herunterladen der Webseite schließt.
Zu sagen, dass HTTP den Socket pro Ressource schließt, vereinfacht die Dinge natürlich zu sehr, da HTTP Funktionen wie Pipelining und dauerhafte Verbindungen aufweist, mit denen mehrere Ressourcen pro Socket heruntergeladen werden können. Das ist aber nur Optimierung. Nachdem alles heruntergeladen wurde, schließt Ihr Browser nach einer gewissen Zeit den Socket.
HTTP wurde ursprünglich als einfaches Protokoll zum Herunterladen von HTML-Dateien entwickelt. Alte Browser können auch HTML-Dateien von anderen Protokollen wie Gopher und FTP herunterladen. Daher gab es keinen Grund, HTTP statusbehaftet zu machen, da HTML-Dateien nur einfache Textdateien sind.
Sobald Webformulare eingeführt wurden und HTML-Seiten Daten an die Server-Webseiten zurücksenden können, werden Sitzungen benötigt. Daher wurden Cookies erstellt, um den Status eines zustandslosen Protokolls wiederherzustellen, das über eine zustandsbehaftete Übertragungsschicht übertragen wird, die über eine zustandslose Netzwerkschicht übertragen wird. Die vollständigen Anwendungsschichten sind also:
In diesen Tagen haben wir Websockets, die einen einzelnen offenen Socket von Ihrer Webseite zum Server halten können. Bei Websockets können Sie also wieder Sockets verwenden, um einen Benutzer zu identifizieren, da der Websocket für sich genommen statusbehaftet ist. In den meisten Fällen benötigen Sie jedoch noch ein Cookie für die HTML-Hauptseite, die das Javascript lädt, mit dem das Websocket gestartet wird.
quelle