Ich bin vom Desktop-Entwickler zum Web-Entwickler gewechselt und habe Probleme zu verstehen, warum HTTP zustandslos ist. Was sind die Gründe dafür? Wie kann ein Desktop-Entwickler wie ich auf eine zustandslose Entwicklungsumgebung umsteigen?
15
Antworten:
Dies ist die beste Erklärung für das staatenlose Internet, das ich gesehen habe:
Wie ich meiner Frau REST erklärt habe
http://www.looah.com/source/view/2284
quelle
Wie wäre es Ihrer Meinung nach möglich, den Zustand von Milliarden von Milliarden von Milliarden von Verbindungen zu speichern? :) Sie speichern den Status also nur dort, wo er benötigt wird, in Sitzungen.
BTW: HTTP ist nicht verbindungslos.
quelle
persistent connections
als Keep-Alive bezeichnen kann. Ich bin kein Netzwerkexperte, aber Sie haben die meiste Zeit eine echte Verbindung in HTTP :)Als Desktop-Entwickler sind Sie möglicherweise mit umfangreichen Benutzeroberflächenerfahrungen zufriedener. Sich im Web zu bewegen, fühlt sich an, als würde man einen Schritt zurück machen. In der Web-Welt gibt es weniger Freiräume für Kreativität und es kann Ihnen ein Gefühl der Einschränkung geben. Lass dich nicht unterkriegen! Es gibt eine Reihe von Dingen, die Ihnen bei der Umstellung helfen können, und hier ist eine kurze Liste davon:
Viel Spaß beim Programmieren!
quelle
Weil es eine Zeit gab, in der es nicht Millionen von Webseiten gab. Weil es eine Zeit gab, in der nur Universitäten und Forschungseinrichtungen ein paar Seiten hatten. Es gab eine Zeit, in der es kein Breitband gab, und http wurde mit 1200-Baud-Modems kommuniziert, die auf Tischtelefonen platziert waren. Es gab eine Zeit, in der "Rich-Web-Apps" aus ihrer Sicht eine lächerliche Menge an Bandbreite benötigt hätten. Und denken Sie daran, TCP / IP wurde erstellt, weil das frühe Internet sehr unzuverlässig war.
HTTP 1.0 gab es in den frühen 1990er Jahren. Denken Sie darüber nach, wie das Internet von damals war und warum sie es so gestaltet haben, wie sie es getan haben.
quelle
Es hat sich alles irgendwie entwickelt. Das Internet existierte vor Webbrowsern und dem Web. Es war ein sprudelnder Topf mit FTP, Telnet, Gopher, Ping, Finger und ein paar anderen Dingen. Der erste Webbrowser, Mosaic (? Ich glaube, es ist lange her, 1991, ich glaube, ich war am College), fungierte als eine Art Mishmash zwischen FTP und einem Dokumentbetrachter. Die Magie bestand darin, dass Sie im Dokument Verknüpfungen haben konnten, die ein neues Dokument auf den neuesten Stand brachten.
Die gesamte Interaktivität, die wir jetzt im Laufe der folgenden 20 Jahre entwickelt haben. Es war auch keine glückliche Entwicklung. Wir hatten die Browserkriege, IE und Netscape haben sie zur Kontrolle von Standards ausgeblendet (ein bisschen vereinfacht;)) und verschiedene andere Drittanbieter haben damit begonnen, Plug-Ins einzuführen, um reichhaltigen Inhalt zu ermöglichen. Java würde das Wundermittel und natürlich Flash sein. Erinnert sich jemand an die VRML-Plug-Ins, die 3D-Welten versprachen und genau ein halbes Dutzend 3D-Modelle von Star Wars-Modellen lieferten?
Ich wurde gegen Ende ein bisschen mitgerissen, aber Sie haben die Idee :)
quelle
Der Hauptgrund liegt in einer Kombination aus dem, was nach Ansicht von Acedemia der Zweck von HTTP war, und aus Gründen der Skalierbarkeit. HTML wurde ursprünglich entwickelt, um Informationen oder Thesen über akademische Grenzen hinweg zu teilen. Es war rein stilisierter Text. Erst mit dem ersten Browser, mit dem Sie Bilder bereitstellen konnten, wurde über dieses Modell hinaus nachgedacht.
Die folgenden Überlegungen haben die staatenlose Entscheidung bestätigt:
Da Webseiten immer komplexer wurden und viele Grafiken und Stylesheets enthielten, wurde HTTP mit dem "Keep-Alive" -Flag versehen. Das würde den Socket am Leben halten und es dem Client ermöglichen, mehrere Ressourcen mit derselben Konversation anzufordern.
In Anbetracht des aktuellen Nutzungsmodells des Internets bleibt die ursprüngliche Entscheidung weiterhin gültig. Es kann manchmal unpraktisch sein, aber mehrere kleine, quantisierte Interaktionen mit einem Server lassen sich besser skalieren als inaktive Sockets.
quelle
Wenn Sie bidirektionale Browser meinen.
Sicherheits Gründe.
Zum Beispiel SPAM !.
Bidirektionale Kommunikation im Web auf die nächste Ebene heben
Andernfalls wird im Internet TCP / IP (zwei Protokolle) und UDP ausgeführt.
quelle
In einer Desktop-Anwendung wird davon ausgegangen, dass der Benutzer eine Reihe von Aufgaben mit einem definierten Anfang und Ende ausführt. In einer solchen Anwendung ist es sinnvoll (eigentlich nicht viel), dass sich Benutzer bei dem Server anmelden, der ihre Daten bereitstellt, und angemeldet bleiben, bis sie fertig sind.
Webinteraktionen folgen (normalerweise) nicht demselben Modell. Auf einer E-Commerce-Website kann ein Benutzer beispielsweise als Ergebnis einer Google-Suche zu einer Produktbeschreibung gelangen und diese Seite sofort verlassen, um das Angebot einer anderen Website für dasselbe Produkt anzuzeigen. Oder er / sie startet möglicherweise den Checkout-Prozess, entscheidet dann, dass das Produkt zu teuer ist, und gibt es zur Hälfte auf. Die Grundidee von "Hypertext" impliziert die Fähigkeit und Erwartung, von einem Ort zum anderen zu springen.
Permanente Verbindungen verbrauchen Ressourcen. Vielleicht nur ein Netzwerk-Socket, vielleicht ein Pool geparster Datenbankabfragen; Alles hängt von der Anwendung ab. Angesichts eines Benutzers, der jederzeit verschwinden kann, ist es nicht sehr sinnvoll, diese Ressourcen zu binden.
In der Praxis muss der Benutzer keine permanente Verbindung haben. Die Webanwendung unterhält Verbindungen zu den benötigten Ressourcen (z. B. der Datenbank) und teilt diese zwischen allen Benutzeranforderungen. Das Web-App-Framework bietet Sitzungen, die zeitlich begrenzt sind, um Benutzerdaten für verschiedene Anforderungen zu speichern. Das Einzige, was Sie (leicht) nicht tun können, ist, über einen langen Zeitraum hinweg clientgesteuerte Transaktionen durchzuführen. Dies ist jedoch eine schlechte Idee, selbst in einer App, die Verbindungen aufrechterhält.
quelle
Das Internet ist nicht notwendigerweise zustandslos - wenn Sie sich Java EE anschauen, haben sie Stateful EJBs und Stateless EJBs.
Der Hauptgrund, warum Entwickler die Verwendung einer statusfreien Architektur empfehlen, liegt in der Skalierbarkeit. Stellen Sie sich vor, Sie versuchen, den Status aller Benutzer beizubehalten, sobald Sie Server hinzufügen und löschen, um Ihren Datenverkehr zu unterstützen.
Es ist wirklich nicht schwer, eine staatenlose Architektur zu entwickeln. Der wichtigste Punkt ist, den Status so gering wie möglich zu halten (normalerweise eine Benutzer-ID - vorzugsweise in einem Cookie) und die Datenbank nach Bedarf zu ändern.
quelle
Ich denke, es hat so angefangen und ist einfach so geblieben. Da es so viele Infrastrukturen gibt, ist es unmöglich, diese zu ändern.
Vielleicht begann es zustandslos, weil die Verbindungen anfangs weniger zuverlässig waren und auch die Bandbreite geringer war. Wenn Sie nicht viele aktive Verbindungen haben, können Sie mehr Verkehr einfacher verarbeiten.
Bitte bearbeite oder hinterlasse einen Kommentar, wenn du bessere Informationen hast oder noch besser, poste deine eigene Antwort!
quelle
Es liegt daran, dass Server einen Dienst bereitstellen (im Namen). Sie stellen eine Anfrage und erhalten Antworten - das ist alles.
In Bezug auf den Übergang zur Webentwicklung glaube ich, dass ASP.NET Web Forms dies auf eine Weise tun wird, die für Sie verständlicher ist - aber nur, weil es verbirgt, was tatsächlich unter Abstraktionsebenen geschieht.
quelle
Man kann vieles verstehen, wenn man den Namen von HTTP (HyperText Transfer Protocol) analysiert. Es wurde nie als reichhaltiges UI-Protokoll konzipiert. Die ursprüngliche Idee war, Dokumente mit Links zwischen ihnen zu teilen. Ich bitte Sie um ein Dokument, Sie antworten mit einer Kopie dieses Dokuments.
Ursprünglich hatte HTTP nur ein Verb GET. Insofern wurde es für statische Inhalte konzipiert. Warum brauchen Sie einen Status, wenn Sie nur ein Dokument anfordern, das von jemandem geteilt wird? Und deshalb ist HTTP zustandslos ... aufgrund seiner Ursprünge.
quelle