HTTP soll zustandslos sein. Das heißt, es müssen keine Informationen für die Datenübertragung gespeichert werden.
HTTP verwendet jedoch TCP, das zustandsorientiert ist.
Wenn dies der Fall ist, wie wird HTTP zustandslos?
networking
tcp
web
Ameisen
quelle
quelle
Antworten:
HTTP kümmert sich nicht um die Protokolle auf niedrigerer Ebene und ist von diesen Protokollen unabhängig, die verwendet werden, um sich selbst zu transportieren, obwohl es selbst statuslos ist.
Die Transporttechnologie kann TCP oder Novells altes SPX oder SCTP sein, oder was auch immer Sie sich vorstellen können, und HTTP wird immer noch genauso funktionieren. HTTP erfordert ein Streaming- oder verbindungsorientiertes Protokoll und hängt davon ab, dass URLs aufgelöst werden können. Dabei ist es jedoch unerheblich, wie dies erreicht wird.
Dies ist einer der Gründe, warum das Schichtenmodell oder der Netzwerkstapel vorhanden ist: Die Anwendungsschicht muss sich nicht mit niedrigeren Schichten befassen.
Nur weil ein Protokoll auf niedrigerer Ebene statusbehaftet ist, bedeutet dies nicht, dass alles darüber automatisch statusbehaftet wird oder statusbehaftet sein muss.
HTTP selbst ist zustandslos. Das bedeutet, dass Anwendungen eine weitere Schicht über HTTP implementieren müssen, um den Status festzulegen. Dies geschieht normalerweise mit Sitzungscookies.
quelle
"HTTP ist zustandslos" bedeutet, dass jede HTTP-Transaktion (Request-Response-Paar) unabhängig von einem Zustand des vorherigen Request-Response-Paares verarbeitet werden kann.
Um das jeweilige Request-Response-Paar zu transportieren, benötigen Sie ein Protokoll, das einen beliebig großen Block dorthin und einen beliebig großen Block zurück transportieren kann, und um dies über eine Schicht mit begrenzter Paketgröße zu tun, muss TCP statusbehaftet sein.
Aber über die Transaktionsgrenze hinweg gibt es keinen Zustand. Der Client kann die Verbindung trennen und eine neue Verbindung für die nächste Anforderung herstellen. Tatsächlich war dies die einzige Option in den frühen Versionen und funktioniert auch dann noch so, wenn der Client den
Connection: keep-alive
Header nicht enthält .Die nächste Anforderung kann auch problemlos von einem anderen Server verarbeitet werden, und der Client wird es nie erfahren, da der Server keinen Status verwalten muss (es sei denn, die Anwendung fügt einen eigenen Status zusätzlich zu HTTP hinzu, normalerweise in Form einer Sitzung). Dies führt zu Komplikationen im Lastausgleich ist seine Bestrafung für den Aufbau eines stateful Protokolls auf HTTP). Dies wird beim Lastausgleich von ausgelasteten Servern ausgenutzt.
quelle
can also easily be handled by different server and the client will never know
Technisch gesehen ist dies jedoch irreführend, da viele Webanwendungen Sticky-Sessions verwenden und ein Load Balancer erforderlich ist, um zukünftige Anforderungen von derselben Browsersitzung an denselben Server weiterzuleiten. Aus der Sicht von HTTP sind Sitzungen irrelevant, aber Ihr letzter Satz impliziert, dass die Endbenutzererfahrung nicht beeinträchtigt wird, was bei Sitzungen mit Dauerhaftigkeit falsch wäre.Die "zustandslose" Natur von HTTP bedeutet, dass auf dieser Ebene keine Statusinformationen erstellt oder verwendet werden.
Sie können dies in einigen Fällen feststellen, z. B. bei der HTTP-Authentifizierung. Die Anmeldeinformationen werden bei jeder Anforderung gesendet, und dauerhafte Verbindungen stellen in Wirklichkeit nur eine Optimierung dar (dh, wenn ich Anmeldeinformationen sende, vergisst der Server diese nach der Anforderung, auch wenn sie beendet werden die Verbindung offen).
Im Gegensatz dazu sind Cookie-basierte Anmeldemechanismen statusbehaftet, jedoch nicht Teil von HTTP.
quelle
Man muss es als einen Satz russischer Puppen (oder Kisten, wenn man will) verstehen, von denen jede eine andere in sich trägt. So funktioniert es im Großen und Ganzen: TCP trägt HTTP "in sich", aber es kümmert sich nicht darum oder um seine Eigenschaften.
Um ein vollständiges Bild zu erhalten, empfehle ich, das OSI-Modell zu lesen, um es klarer zu machen.
TCP befindet sich im OSI-Modell einige Schichten unter HTTP. Jede Schicht entspricht tatsächlich einem anderen Protokoll.
In unserem Fall befindet sich HTTP in der Präsentations- und Anwendungsschicht und TCP in der Transportschicht. Wenn Sie das TCP / IP-Modell verwenden, befinden sich sowohl das TCP- als auch das IP-Protokoll in der Netzwerkverbindungsschicht und HTTP in der Anwendungs- und Präsentationsschicht.
quelle