Das staatenlose Internet verstehen [geschlossen]

15

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?

P. Brian Mackey
quelle
3
Hallo Brian, Programmers.SE ist kein Diskussionsforum . Gibt es ein bestimmtes Problem, bei dem Sie Hilfe benötigen? Wenn ja, können Sie Ihre Frage umformulieren?
Normalerweise lässt du den Server die Details der Session-Cookies verwalten.
FrustratedWithFormsDesigner
Ich denke, dies sollte wieder eröffnet werden, da es jetzt ein Dutzend "adäquate Antworten" gibt. Vor allem, weil auf eine andere aktuelle Frage hingewiesen wurde, von der behauptet wird, dass sie diese dupliziert. Es kann in keiner Richtung ein Duplikat sein, wenn es überhaupt nicht hier sein soll. Lassen Sie uns hier etwas Vernunft haben.

Antworten:

18

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

Frau: Wer ist Roy Fielding?

Ryan: Ein Typ. Er ist schlau.

Frau: Oh? Was hat er getan?

Ryan: Er hat geholfen, die ersten Webserver zu schreiben und hat dann eine Menge Nachforschungen angestellt, um zu erklären, warum das Web so funktioniert, wie es funktioniert. Sein Name steht in der Spezifikation für das Protokoll, mit dem Seiten von Servern an Ihren Browser gesendet werden.

Frau: Wie funktioniert es?

Ryan: Das Web?

Frau: Ja.

Ryan: Hmm. Nun, es ist wirklich alles ziemlich erstaunlich. Und das Lustige ist, dass alles sehr unterbewertet ist. Das Protokoll, über das ich gesprochen habe, HTTP, ist in der Lage, alle möglichen netten Dinge zu verarbeiten, die die Leute aus irgendeinem Grund ignorieren.

Frau: Du meinst http wie der Anfang dessen was ich in den Browser eingebe?

Ryan: Ja. Dieser erste Teil teilt dem Browser mit, welches Protokoll verwendet werden soll. Das Zeug, das Sie dort eingeben, ist einer der wichtigsten Durchbrüche in der Geschichte des Rechnens.

Frau: Warum?

Ryan: Weil es in der Lage ist, irgendwo auf der Welt den Ort von irgendwo auf der Welt zu beschreiben. Es ist das Fundament des Webs. Sie können es sich wie GPS-Koordinaten für Wissen und Information vorstellen.

Frau: Für Webseiten?

Ryan: Wirklich für alles. Dieser Typ, Roy Fielding, spricht viel darüber, worauf diese Dinge in der Forschung hindeuten, über die ich gesprochen habe. Das Web basiert auf einem architektonischen Stil namens REST. REST bietet eine Definition einer Ressource, auf die diese Dinge verweisen.

Frau: Eine Webseite ist eine Ressource?

Ryan: Irgendwie. Eine Webseite ist eine Darstellung einer Ressource. Ressourcen sind nur Konzepte. URLs - die Dinge, die Sie in den Browser eingeben ...

Frau: Ich weiß, was eine URL ist ..

Ryan: Oh, richtig. Diese teilen dem Browser mit, dass es irgendwo ein Konzept gibt. Ein Browser kann dann nach einer bestimmten Darstellung des Konzepts fragen. Insbesondere fragt der Browser nach der Darstellung des Konzepts auf der Webseite.

Frau: Welche anderen Arten von Darstellungen gibt es?

Ryan: Repräsentationen gehören eigentlich zu den Dingen, die nicht oft gebraucht werden. In den meisten Fällen hat eine Ressource nur eine einzige Darstellung. Wir hoffen jedoch, dass Repräsentationen in Zukunft häufiger verwendet werden, da überall eine Reihe neuer Formate auftauchen.

Frau: Wie was?

Ryan: Hmm. Nun, es gibt dieses Konzept, das die Leute als Web Services bezeichnen. Es bedeutet für viele verschiedene Menschen eine Menge verschiedener Dinge, aber das Grundkonzept ist, dass Maschinen das Web genauso nutzen können, wie es Menschen tun.

Frau: Ist das eine andere Robotersache?

Ryan: Nein, nicht wirklich. Ich meine nicht, dass Maschinen am Schreibtisch sitzen und im Internet surfen. Computer können jedoch dieselben Protokolle verwenden, um Nachrichten untereinander hin und her zu senden. Wir machen das schon lange, aber keine der Techniken, die wir heute anwenden, funktioniert gut, wenn Sie in der Lage sein müssen, mit allen Maschinen auf der ganzen Welt zu sprechen.

Frau: Warum nicht?

Ryan: Weil sie nicht dafür entworfen wurden, so benutzt zu werden. Als Fielding und seine Freunde anfingen, das Web aufzubauen, war es ein Hauptanliegen, mit jeder Maschine auf der Welt kommunizieren zu können. Die meisten Techniken, die wir bei der Arbeit anwenden, um Computer zum miteinander Sprechen zu bringen, erfüllten diese Anforderungen nicht. Sie mussten nur mit einer kleinen Gruppe von Maschinen sprechen.

Frau: Und jetzt müssen Sie mit allen Maschinen sprechen?

Ryan: Ja - und mehr. Wir müssen in der Lage sein, mit allen Maschinen über alle Dinge zu sprechen, die auf allen anderen Maschinen vorhanden sind. Wir müssen also eine Möglichkeit haben, dass ein Computer einem anderen Computer von einer Ressource erzählt, die sich möglicherweise auf einem anderen Computer befindet.

Frau: Was?

Ryan: Sagen wir du sprichst mit deiner Schwester und sie möchte sich die Kehrmaschine ausleihen oder so. Aber du hast es nicht - deine Mutter hat es. Also sagst du deiner Schwester, sie soll es stattdessen von deiner Mutter bekommen. Dies passiert die ganze Zeit im wirklichen Leben und es passiert die ganze Zeit, wenn Maschinen anfangen zu reden.

Frau: Wie sagen sich die Maschinen also, wo sich die Dinge befinden?

Ryan: Die URL natürlich. Wenn alles, worüber Maschinen sprechen müssen, eine entsprechende URL hat, haben Sie das Maschinenäquivalent eines Substantivs erstellt. Dass Sie und ich und der Rest der Welt sich darauf geeinigt haben, auf bestimmte Weise über Substantive zu sprechen, ist ziemlich wichtig, was?

Frau: Ja.

Ryan: Maschinen haben kein universelles Nomen - deshalb saugen sie. Jede Programmiersprache, Datenbank oder ein anderes System spricht anders über Substantive. Deshalb ist die URL so wichtig. Lassen Sie uns alle diese Systeme einander über die Substantive des anderen erzählen.

Frau: Aber wenn ich mir eine Webseite anschaue, denke ich nicht so darüber nach.

Ryan: Das tut niemand. Außer Fielding und einer Handvoll anderer Leute. Deshalb saugen Maschinen immer noch.

Frau: Was ist mit Verben und Pronomen und Adjektiven?

Ryan: Komisch, dass du gefragt hast, weil das ein weiterer großer Aspekt von REST ist. Naja, Verben sind sowieso.

Frau: Ich habe nur Spaß gemacht.

Ryan: Es war ein lustiger Witz, aber eigentlich überhaupt kein Witz. Verben sind wichtig. Es gibt ein leistungsfähiges Konzept in der Programmierung und in der CS-Theorie, das Polymorphismus genannt wird. Das ist eine freche Art zu sagen, dass auf verschiedene Substantive dasselbe Verb angewendet werden kann.

Frau: Ich verstehe es nicht.

Ryan: Nun ... sieh dir den Kaffeetisch an. Was sind die Hauptwörter? Tasse, Tablett, Zeitung, Fernbedienung. Was können Sie mit all diesen Dingen tun?

Frau: Ich verstehe es nicht ...

Ryan: Du kannst sie bekommen, richtig? Sie können sie abholen. Sie können sie umwerfen. Sie können sie verbrennen. Sie können dieselben exakten Verben auf alle Objekte anwenden, die sich dort befinden.

Frau: Okay ... also?

Ryan: Nun, das ist wichtig. Was wäre, wenn ich nicht in der Lage wäre, Ihnen zu sagen: "Holen Sie sich die Tasse" und "Holen Sie sich die Zeitung" und "Holen Sie sich die Fernbedienung"? Was wäre, wenn wir stattdessen für jedes der Nomen unterschiedliche Verben entwickeln müssten? Ich konnte das Wort "get" nicht universell verwenden, sondern musste mir für jede Verb / Nomen-Kombination ein neues Wort ausdenken.

Frau: Wow! Das ist komisch.

Ryan: Ja, das ist es. Unser Gehirn ist irgendwie klug genug zu wissen, dass die gleichen Verben auf viele verschiedene Substantive angewendet werden können. Einige Verben sind spezifischer als andere und gelten nur für eine kleine Menge von Substantiven. Zum Beispiel kann ich keine Tasse fahren und ich kann kein Auto trinken. Aber einige Verben sind fast universell wie GET, PUT und DELETE.

Frau: Sie können keine Tasse LÖSCHEN.

Ryan: Okay, aber du kannst es wegwerfen. Das war doch noch ein Witz, oder?

Frau: Ja.

Ryan: Bei HTTP - diesem Protokoll, das Fielding und seine Freunde erstellt haben - geht es darum, Verben auf Substantive anzuwenden. Wenn Sie beispielsweise eine Webseite aufrufen, führt der Browser einen HTTP-GET-Befehl für die von Ihnen eingegebene URL aus, und es wird eine Webseite aufgerufen.

Webseiten haben normalerweise Bilder, oder? Das sind getrennte Ressourcen. Die Webseite gibt nur die URLs zu den Bildern an, und der Browser führt weitere HTTP-GETs durch, bis alle Ressourcen abgerufen wurden und die Webseite angezeigt wird. Wichtig hierbei ist jedoch, dass sehr unterschiedliche Arten von Substantiven gleich behandelt werden können. Ob es sich bei dem Nomen um ein Bild, einen Text, ein Video, eine MP3-Datei oder eine Diashow handelt. Ich kann all diese Dinge auf die gleiche Weise mit einer URL erhalten.

Frau: Klingt wie GET ist ein ziemlich wichtiges Verb.

Ryan: Das ist es. Vor allem, wenn Sie einen Webbrowser verwenden, weil die Browser so ziemlich alles GET haben. Sie machen nicht viele andere Arten der Interaktion mit Ressourcen. Dies ist ein Problem, da viele Leute davon ausgehen, dass HTTP nur für GETing gedacht ist. Aber HTTP ist eigentlich ein Allzweckprotokoll zum Anwenden von Verben auf Substantive.

Frau: Cool. Aber ich sehe immer noch nicht, wie das irgendetwas ändert. Welche Arten von Nomen und Verben möchten Sie?

Ryan: Nun, die Nomen sind da, aber nicht im richtigen Format.

Denken Sie daran, wenn Sie auf amazon.com nach Dingen suchen, die Sie mir zu Weihnachten kaufen können. Stellen Sie sich jedes der Produkte als Substantive vor. Wenn sie nun in einer Darstellung verfügbar wären, die eine Maschine verstehen könnte, könnten Sie viele nette Dinge tun.

Frau: Warum kann eine Maschine eine normale Webseite nicht verstehen?

Ryan: Weil Webseiten so gestaltet sind, dass sie von Menschen verstanden werden. Eine Maschine kümmert sich nicht um Layout und Styling. Maschinen brauchen im Grunde nur die Daten. Im Idealfall hätte jede URL eine für Menschen lesbare und eine maschinenlesbare Darstellung. Wenn eine Maschine die Ressource abruft, fragt sie nach der maschinenlesbaren Ressource. Wenn ein Browser eine Ressource für einen Menschen abruft, fragt er nach der für Menschen lesbaren Ressource.

Frau: Also müssten die Leute Maschinenformate für alle ihre Seiten erstellen?

Ryan: Wenn es wertvoll wäre.

Schauen Sie, wir haben mit viel Abstraktion darüber gesprochen. Wie wäre es mit einem konkreten Beispiel? Sie sind Lehrer - ich wette, Sie haben in der Schule ein großes Computersystem oder drei oder vier Computersysteme, mit denen Sie die Schüler verwalten können: welche Klassen sie besuchen, welche Noten sie bekommen, Notfallkontakte, Informationen Informationen zu den Büchern, aus denen Sie unterrichten usw. Wenn die Systeme webbasiert sind, gibt es wahrscheinlich eine URL für jedes der hier verwendeten Substantive: Schüler, Lehrer, Klasse, Buch, Raum usw. Im Moment erhalten Sie die URL durch Der Browser gibt Ihnen eine Webseite. Wenn es für jede URL eine maschinenlesbare Darstellung gäbe, wäre es trivial, neue Tools in das System einzuspeichern, da alle diese Informationen auf standardmäßige Weise konsumierbar wären. Dies würde es auch für jedes der Systeme ein bisschen einfacher machen, miteinander zu sprechen. Oder Sie könnten ein staatliches oder landesweites System aufbauen, das in der Lage ist, mit jedem einzelnen Schulsystem zu sprechen, um Testergebnisse zu sammeln. Die Möglichkeiten sind endlos.

Jedes der Systeme würde mit einem einfachen HTTP-GET Informationen voneinander erhalten. Wenn ein System einem anderen System etwas hinzufügen muss, wird ein HTTP-POST verwendet. Wenn ein System etwas in einem anderen System aktualisieren möchte, verwendet es einen HTTP-PUT. Sie müssen nur noch herausfinden, wie die Daten aussehen sollen.

Frau: Also ist es das, woran Sie und all die Computerleute gerade arbeiten? Überlegen Sie, wie die Daten aussehen sollen?

Ryan: Leider nein. Stattdessen ist die große Mehrheit damit beschäftigt, Schichten komplexer Spezifikationen zu schreiben, um diese Dinge auf eine andere Weise zu erledigen, die bei weitem nicht so nützlich oder beredt ist. Substantive sind nicht universell und Verben sind nicht polymorph. Wir werfen Jahrzehnte des realen Feldeinsatzes und der bewährten Technik zurück und beginnen mit etwas, das anderen Systemen, die in der Vergangenheit ausgefallen sind, sehr ähnlich sieht. Wir verwenden HTTP, aber nur, weil es uns hilft, weniger mit unserem Netzwerk und Sicherheitspersonal zu kommunizieren. Wir tauschen Einfachheit gegen auffällige Tools und Assistenten.

Frau: Warum?

Ryan: Ich habe keine Ahnung.

Frau: Warum sagst du nichts?

Ryan: Vielleicht werde ich.

Robert Harvey
quelle
1
Das ist eine großartige Lektüre. Http wird also konventionell verwendet, weil es einfach ist. Das einzige, was ich hinzufügen möchte, ist etwas über Speicherbeschränkungen, wie Slawek betonte, da wir schnell keine Ressourcen mehr für größere Websites haben. Vielleicht können wir eines Tages, wenn die Ressourcen einer Maschine im Vergleich zu den Bedürfnissen ihrer Benutzer groß sind, ein zustandsbehaftetes Internet haben.
P.Brian.Mackey
5
Ich hätte keine Angst davor, staatenlos zu sein. es ist nur eine andere Sichtweise. Mit der Zeit werden Sie möglicherweise feststellen, dass dies ein sinnvollerer Weg ist, insbesondere für große, skalierbare Anwendungen. Auf jeden Fall können Sie den Status immer in Ihrer Datenbank speichern und ihn bei nachfolgenden Seitenanforderungen abrufen. Mit Stateless denken Sie mehr an Transaktionen als an Aktualisierungen von kleinen Statusmustern.
Robert Harvey
2
Ich war so geblendet von meiner staatlichen Herangehensweise an die Programmierung, dass ich einen tieferen Punkt im Artikel übersehen habe. Ich muss ein paar hundert Mal das Motto "Staatenlos ist kein Defekt" in mein Gehirn stecken ... Danke für den tollen Kommentar und die Antwort.
P.Brian.Mackey
Worauf bezieht sich der letzte Absatz (5 Zeilen vom Ende entfernt)? Ich hatte eine Idee, aber ich wollte mich nicht wie ein Idiot fühlen, der irgendwelche Vermutungen anstellt.
Steven
1
@Steven: Ich glaube, der Absatz bezieht sich auf Dinge wie SOAP oder möglicherweise CORBA (Schauder).
Robert Harvey
6

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.

Slawek
quelle
1
@P. Es ist kaum beruhigend, wenn die von Ihnen zitierte Referenz mit Folgendem beginnt: Dieser Artikel enthält Wieselwörter, vage Formulierungen, die häufig voreingenommene oder nicht überprüfbare Informationen begleiten.
Chrisaycock
3
HTTP ist verbindungslos. Sie senden eine HTTP-Anfrage, erhalten etwas zurück, was HTTP betrifft, ist die Verbindung beendet. Der Server kann verschiedene Anforderungen verbinden, um eine Sitzung zu bilden. Dies ist jedoch keine inhärente Eigenschaft von HTTP.
David Thornley
2
HTTP verwendet TCP / IP als Transport (nicht UDP), aber das ist eine andere ISO-OSI-Schicht, die man persistent connectionsals Keep-Alive bezeichnen kann. Ich bin kein Netzwerkexperte, aber Sie haben die meiste Zeit eine echte Verbindung in HTTP :)
Slawek
2
Ok, was ich davon habe, ist, dass die verbreitete Überzeugung, dass verbindungslos mit staatenlos gleichgesetzt werden kann, falsch ist. Ich denke, wir können zustimmen, dass http zustandslos ist, oder schauen Sie sich die Spezifikation an, um selbst zu sehen, w3.org/TR/html401/interact/forms.html (Suche zustandslos). Siehe auch RFC2616 für Statuslosigkeit von http ietf.org/rfc/rfc2616.txt . Es gibt Verbindungen, aber die Verbindungen sind "blinde Relais".
P.Brian.Mackey
2
Verbindungen sind im Web virtuell. Um eine echte Verbindung zu haben, benötigen Sie technisch gesehen ein dediziertes Kabel, das Sie mit der anderen Seite verbindet, wie Telefonkabel (zumindest in den <90er Jahren). Wenn eine Seite die Verbindung "trennt", wird die andere nicht wissen, es sei denn, sie erhält ein Paket, das besagt, dass die andere Seite nicht mehr zuhört. Theoretisch kann dieses Paket niemals ankommen. Nach einem Timeout 'trennt' sich auch der Server. Aus diesem Grund sind Verbindungen jedoch immer virtuell.
Neil
4

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:

  1. Der Status kann freigegeben werden, wird jedoch häufig auf dem Server gespeichert und mithilfe von Token wie Sitzungs-IDs, URL-Parametern, ausgeblendeten Feldern oder Cookie-Werten referenziert.
  2. Zustandslose Modelle eignen sich gut für die Transaktionsverarbeitung. Versuchen Sie, Ihr Modell so zu erstellen, dass weniger Status erforderlich ist. Die ACID- Prinzipien der Transaktionsverarbeitung können Ihnen dabei helfen.
  3. Machen Sie sich mit dem MVC- Muster vertraut (falls Sie dies nicht bereits tun ). Auf diese Weise können Sie Ihr Design verbessern, indem Sie die Bedenken voneinander trennen. Einige gängige Frameworks wie Struts (Java) und MVC (.NET) basieren auf diesem Konzept.
  4. Erwägen Sie die Verwendung eines Plugins wie Java , Flash oder Silverlight, um eine überaus umfangreiche Benutzeroberfläche zu erhalten. Erwägen Sie für semi-reiche Erfahrungen die Verwendung beliebter, auf Java-Skripten basierender Bibliotheken wie JQuery oder AJAX .

Viel Spaß beim Programmieren!

k Rey
quelle
1
nur eine Randnotiz: seien Sie vorsichtig mit dem MVC-Akronym; Es wurde ursprünglich als OO-Design für GUI-Apps definiert und später in eine Layer-Architektur für Web-Apps umgewandelt. Das sind zwei sehr unterschiedliche Dinge.
Javier
Sie schlagen dem OP vor, sich direkt mit Technologien zu befassen, die eine Umgehung des Problems im Web ermöglichen, ohne Status zu sein, anstatt zuerst die Grundlagen zu erlernen?
Tulains Córdova
3

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.

Whatsisname
quelle
Das "späte" Internet ist immer noch unzuverlässig.
Pemdas
@Pemdas - was meinst du mit "spätem" Internet?
P.Brian.Mackey
Einfach nicht pflücken. Ohne Protokolle wie TCP ist die Datenübertragung immer noch unzuverlässig, und selbst TCP kann nicht erklären, dass eine Verbindung nicht verfügbar ist.
Pemdas
3

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 :)

Ian
quelle
Es ist in Ordnung, viele andere Leute sind mitgerissen worden, hauptsächlich Marketingleute. Wo wären wir jetzt außer dem Rohertragsmotiv? Immer noch ein paar Geeks, die "einige Computer anschließen", denke ich.
3

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:

  • Die typische Interaktion sollte ein schneller Download und ein schnelles Lesen sein. Während der Verzögerung bis zur nächsten Anforderung würde die Steckdose im Leerlauf sitzen.
  • Sockets beanspruchen wertvolle Systemressourcen. Wenn wir nicht wie bei SMTP eine Konversation aufrechterhalten müssen, können Sie viel tun, damit ein Computer Tausende von Clients verarbeitet.
  • Sie haben bereits wertvolle Erfahrungen mit der Verwaltung von Remote-Shell-Konten, NFS, SMTP und anderen Stateful-Verbindungsprotokollen gesammelt.

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.

Berin Loritsch
quelle
3

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.

Das Übertragungssteuerungsprotokoll(TCP) ist eines der Kernprotokolle der Internet Protocol Suite. TCP ist eine der beiden ursprünglichen Komponenten der Suite und ergänzt das Internet Protocol (IP). Daher wird die gesamte Suite im Allgemeinen als TCP / IP bezeichnet. TCP bietet den Dienst des direkten Datenaustauschs zwischen zwei Hosts im selben Netzwerk, wohingegen IP die Adressierung und Weiterleitung von Nachrichten über ein oder mehrere Netzwerke übernimmt. Insbesondere ermöglicht TCP die zuverlässige, geordnete Übermittlung eines Bytestroms von einem Programm auf einem Computer an ein anderes Programm auf einem anderen Computer. TCP ist das Protokoll, auf das sich die wichtigsten Internetanwendungen stützen, z. B. das World Wide Web, E-Mail und die Dateiübertragung. Andere Anwendungen, die keinen zuverlässigen Datenstromdienst erfordern,

Das Internet-Protokoll(IP) ist das Hauptkommunikationsprotokoll, das zum Weiterleiten von Datagrammen (Paketen) über ein Internetwork mithilfe der Internet Protocol Suite verwendet wird. Es ist für die Weiterleitung von Paketen über Netzwerkgrenzen hinweg verantwortlich und das primäre Protokoll, mit dem das Internet eingerichtet wird. IP ist das primäre Protokoll in der Internet-Schicht der Internet Protocol Suite und hat die Aufgabe, Datagramme nur anhand ihrer Adressen vom Quellhost zum Zielhost zu übertragen. Zu diesem Zweck definiert IP Adressierungsmethoden und -strukturen für die Datagramm-Kapselung. In der Vergangenheit war IP der verbindungslose Datagrammdienst im ursprünglichen Übertragungssteuerungsprogramm, das 1974 von Vint Cerf und Bob Kahn eingeführt wurde, und das verbindungsorientierte Übertragungssteuerungsprotokoll (TCP). Die Internet Protocol Suite wird daher häufig als TCP / IP bezeichnet.

Amir Rezaei
quelle
3

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.

Anon
quelle
2

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.

Brian D.
quelle
1

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!

Michael K
quelle
1

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.

Billy Bob
quelle
Ich war ein Winforms-Entwickler, der einmal versucht hat, auf ASP.NET-Webforms umzusteigen. Die Erfahrung war nicht angenehm. Ich bevorzuge ASP.NET MVC.
Robert Harvey
Ah richtig - nun, ich habe mit PHP angefangen und bin dann umgezogen. Es dauerte ungefähr 6 Monate, bis ich aufhörte, HTML in Schleifen zu
generieren
1

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.

Michael Brown
quelle