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:
- Ethernet, Wifi usw. = zustandslos
- IP = zustandslos
- TCP = Stateful
- HTTP = zustandslos
- HTTP + Cookies = Stateful
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.