Bitte beachten Sie, dass sich die Frage geändert / geklärt hat, seit diese Antwort zum ersten Mal geschrieben wurde. Eine weitere Antwort auf die letzte Wiederholung der Frage folgt nach der zweiten horizontalen Regel
Was ist der Bedarf an Methoden wie GET und POST im HTTP-Protokoll?
Sie bilden, zusammen mit einigen anderen Dingen wie Header-Formaten, Regeln für die Trennung von Headern und Body, die Grundlage des HTTP-Protokolls
Können wir das HTTP-Protokoll nicht nur mit einem Anforderungs- und einem Antworttext implementieren?
Nein, denn was auch immer Sie erstellt haben, wäre nicht das HTTP-Protokoll
Beispielsweise enthält die URL eine Anfrage, die einer Funktion zugeordnet wird, die von der Programmiersprache auf der Serverseite abhängt, beispielsweise einem Servlet. Als Antwort werden HTML- und JavaScript-Antworten gesendet.
Herzlichen Glückwunsch, Sie haben gerade ein neues Protokoll erfunden! Wenn Sie nun einen Standardkörper einrichten möchten, um ihn zu betreiben, zu warten, zu entwickeln usw., könnte er eines Tages HTTP überholen
Ich schätze, das ist ein bisschen verwunderlich, aber das Internet, TCP / IP oder die Kommunikation zwischen Servern und Clients haben nichts Magisches an sich. Sie stellen eine Verbindung her und senden ein paar Worte, um ein Gespräch zu führen. Die Konversation muss wirklich an beiden Enden einer bestätigten Spezifikation entsprechen, wenn die Anforderungen verstanden und vernünftige Antworten geliefert werden sollen. Dies unterscheidet sich nicht von jedem Dialog auf der Welt. Sie sprechen Englisch, Ihr Nachbar spricht Chinesisch. Hoffentlich reicht es aus, wenn Sie mit der Hand winken, zeigen und mit der Faust zittern, um Ihre Botschaft zu übermitteln, dass er sein Auto nicht vor Ihrem Haus parken soll.
Wieder im Internet, wenn Sie einen Socket zu einem HTTP-kompatiblen Webserver öffnen und Folgendes senden:
EHLO
AUTH LOGIN
(Der Beginn einer SMTP-E-Mail-Übertragung) Dann erhalten Sie keine vernünftige Antwort. Sie könnten den perfektesten SMTP-kompatiblen Client erstellen, aber Ihr Webserver wird nicht mit ihm sprechen, da es bei dieser Konversation nur um das gemeinsame Protokoll geht - kein gemeinsames Protokoll, keine Freude.
Aus diesem Grund können Sie das HTTP-Protokoll nicht implementieren, ohne das HTTP-Protokoll zu implementieren. Wenn das, was Sie schreiben, nicht dem Protokoll entspricht, ist es einfach nicht das Protokoll - es ist etwas anderes, und es funktioniert nicht wie im Protokoll angegeben
Wenn wir für einen Moment mit Ihrem Beispiel rennen; Wenn der Client eine Verbindung herstellt und nur etwas angibt, das aussieht wie eine URL. Und der Server versteht es und sendet nur etwas, das aussieht wie HTML / JS (eine Webseite), dann könnte es funktionieren. Was hast du allerdings gespart? Ein paar Bytes, wenn Sie nicht GET sagen? Nur ein paar mehr zum Löschen dieser lästigen Header. Der Server hat auch einige gespeichert - aber was ist, wenn Sie nicht herausfinden können, was er Ihnen gesendet hat? Was ist, wenn Sie nach einer URL gefragt haben, die mit JPEG endet und Ihnen einige Bytes sendet, die ein Bild ergeben, aber in PNG? Eine unvollständige PNG dazu. Wenn wir nur einen Header hätten, der angibt, wie viele Bytes er enthältzu senden, dann würden wir wissen, ob die Anzahl der Bytes, die wir empfangen haben, tatsächlich die gesamte Datei ist oder nicht. Was passiert, wenn der Server die Antwort gezippt hat, um Bandbreite zu sparen, Ihnen dies aber nicht mitgeteilt hat? Sie werden beträchtliche Rechenleistung aufwenden, um herauszufinden, was es gesendet hat.
Letztendlich brauchen wir Metainformationen - Informationen über Informationen; wir brauchen Überschriften; Wir brauchen Dateien, die Namen, Erweiterungen und Erstellungsdaten haben. Wir brauchen Leute, die Geburtstage haben, um bitte und danke zu sagen usw. - die Welt ist voll von Protokollen und Informationen über den Kontext, damit wir uns nicht die ganze Zeit hinsetzen und alles von Grund auf neu ausarbeiten müssen. Es kostet ein bisschen Speicherplatz, aber es lohnt sich leicht
Ist die Implementierung verschiedener HTTP-Methoden wirklich erforderlich?
Man muss wohl nicht das gesamte angegebene Protokoll implementieren, und dies gilt normalerweise für alles. Ich kenne nicht jedes Wort in der englischen Sprache. Mein chinesischer Nachbar ist ebenfalls Softwareentwickler, aber in einer anderen Branche und er kennt nicht einmal die Chinesen für einige der in meiner Branche verwendeten Begriffe, geschweige denn die Engländer. Das Gute ist jedoch, dass wir beide ein Dokument über die Implementierung von HTTP abholen können, er den Server und ich den Client in verschiedenen Programmiersprachen auf verschiedenen Architekturen schreiben können und sie weiterhin funktionieren, weil sie sich an das Protokoll halten
Es kann durchaus vorkommen, dass keiner Ihrer Benutzer eine andere Anforderung als eine GET-Anforderung ausgibt, keine dauerhaften Verbindungen verwendet, andere als JSON als Textkörper sendet oder andere als text / plain akzeptiert, damit Sie dies tun können Schreiben Sie einen wirklich reduzierten Webserver, der nur die sehr begrenzten Anforderungen des Client-Browsers erfüllt. Sie konnten sich jedoch nicht einfach willkürlich entscheiden, die Grundregeln aufzuheben, die bewirken, dass "ein Teil des Textes über einen Socket weitergeleitet wird", was HTTP ist. Sie können die Grundidee, dass die Anfrage eine Zeichenkette sein wird, nicht loswerden:
VERB URL VERSION
header: value
maybe_body
Die Antwort enthält eine Version, einen Statuscode und möglicherweise Überschriften. Wenn Sie irgendetwas davon ändern - es ist nicht mehr HTTP -, ist es etwas anderes und funktioniert nur mit etwas, das entworfen wurde, um es zu verstehen. HTTP entspricht diesen Definitionen. Wenn Sie es also implementieren möchten, müssen Sie den Definitionen folgen
Aktualisieren
Ihre Frage hat sich etwas weiterentwickelt. Hier ist eine Antwort auf Ihre Frage:
Warum kennt das HTTP-Protokoll Methoden?
Historisch gesehen muss man erkennen, dass die Dinge viel unflexibler in ihrem Design und ihrer Implementierung waren, selbst in dem Maße, wie es kein Scripting gab und sogar die Vorstellung, dass Seiten dynamisch sein könnten, im laufenden Betrieb im Speicher generiert und stattdessen den Socket runtergeschoben werden Es gab keine statische Datei auf der Festplatte, die vom Client angefordert und vom Socket gelesen und heruntergeladen wurde. Als solches wäre das sehr frühe Web, das sich um den Begriff der statischen Seiten drehte, die Links zu anderen Seiten enthielten, alle Seiten auf der Festplatte und Navigation gewesen, wenn das Terminal meistens GET-Anfragen für Seiten an URLs gestellt hätte, die der Server abbilden könnte die URL zu einer Datei auf der Festplatte und senden Sie es. Es gab auch den Gedanken, dass sich das Netz von Dokumenten, die miteinander und mit anderen verknüpft sind, weiterentwickeln sollte.
Das gibt einen historischen Kontext für die Methoden - früher war die URL das unflexible Bit und bezog sich vereinfacht auf Seiten auf der Festplatte, sodass die Methode nützlich war, da der Client beschreiben konnte, welche Absichten sie für die Datei und den Server hatte Verarbeiten Sie die Methode auf unterschiedliche Weise. Es gab eigentlich keine Vorstellung davon, dass URLs virtuell sind oder zum Umschalten oder Zuordnen in der ursprünglichen Vision eines Hypertext-Webs (und es war wirklich nur Text) verwendet werden
Ich beabsichtige nicht, dass diese Antwort eine Dokumentation der historischen Aufzeichnungen mit Daten und zitierten Referenzen darüber ist, wann sich die Dinge zu ändern begannen - dafür kann man wahrscheinlich Wikipedia lesen -, aber es ist ausreichend zu sagen, dass im Laufe der Zeit der Wunsch nach dem Das Web wird immer dynamischer und an jedem Ende der Server-Client-Verbindung werden die Möglichkeiten erweitert, ein reichhaltiges Multimedia-Erlebnis zu schaffen. Die Browser unterstützten eine große Anzahl von Tags für die Formatierung von Inhalten, wobei jeder einzelne nach unerlässlichen Funktionen für die Medienvielfalt und neuen Möglichkeiten suchte, die Dinge elegant aussehen zu lassen.
Auf Client-Seite kamen Skripte, Plugins und Browser-Erweiterungen, die den Browser zu einem mächtigen Kraftpaket für alles machen sollten. Auf der Serverseite war die aktive Generierung von Inhalten auf der Basis von Algorithmen oder Datenbankdaten der große Schub, und sie entwickelt sich in dem Maße weiter, in dem sich wahrscheinlich nur noch wenige Dateien auf der Festplatte befinden. Wir behalten also eine Bild- oder Skriptdatei als Datei bei Der Webserver und der Browser holen es sich, aber zunehmend sind die Bilder, die der Browser anzeigt, und die Skripte, die er ausführt, keine Dateien, die Sie in Ihrem Datei-Explorer öffnen können, sondern generierte Inhalte, die die Ausgabe eines Kompilierungsprozesses sind, der bei Bedarf ausgeführt wird , SVG, das beschreibt, wie Pixel anstatt eines Bitmap-Arrays von Pixeln gezeichnet werden, oder JavaScript, das von einer übergeordneten Skriptform wie TypeScript ausgegeben wurde
Bei der Erstellung moderner Multi-Megabyte-Seiten ist wahrscheinlich nur ein Bruchteil davon jetzt fester Inhalt auf einer Festplatte. Datenbankdaten werden formatiert und in HTML-Form gebracht, die der Browser verwendet, und vom Server als Reaktion auf mehrere verschiedene Programmierroutinen, auf die die URL in irgendeiner Weise verweist
Ich erwähnte in den Kommentaren zu der Frage, dass es ein bisschen wie ein voller Kreis ist. Damals, als Computer Hunderttausende kosteten und Räume füllten, war es üblich, dass mehrere Benutzer über Hunderte von dummen Terminals den einen sehr leistungsstarken zentralen Großrechner nutzten - eine Tastatur und eine Maus, ein grüner Bildschirm, etwas Text einschicken, etwas abrufen Text aus. Im Laufe der Zeit, als die Rechenleistung zunahm und die Preise sanken, wurden die Desktop-Computer leistungsstärker als bei früheren Mainframes und die Möglichkeit, leistungsstarke Apps lokal auszuführen, wurde das Mainframe-Modell veraltet. Es ging jedoch nie verloren, da sich die Dinge nur in die entgegengesetzte Richtung entwickelten und zu einem zentralen Server zurückkehrten, der den größten Teil der nützlichen App-Funktionalität und hundert Client-Computer bereitstellte, auf denen außer dem Zeichnen auf dem Bildschirm nur sehr wenig zu tun war. Senden und Empfangen von Daten zum / vom Server. In der Zwischenzeit, in der Ihr Computer intelligent genug war, um eine eigene Kopie von Word und Outlook gleichzeitig auszuführen, wurde Office Online wieder aktiviert, in dem Ihr Browser ein Gerät zum Zeichnen von Bildern auf dem Bildschirm und Bearbeiten des Dokuments / der E-Mail ist. Das Schreiben als eine Sache, die auf dem Server lebt, dort gespeichert, gesendet und mit anderen Benutzern geteilt wird, unter der Annahme, dass der Browser nur eine Shell ist, die zu jeder Zeit eine Teilansicht dieser Sache bietet, die woanders lebt
Aus den Antworten ergibt sich ein Gefühl dafür, warum es ein Konzept von Methoden gibt. Dies führt zu einer weiteren verwandten Frage:
Beispielsweise werden in Google Mail beim Erstellen eines Links die PUT / POST-Anforderung und die Daten gesendet. Wie erfährt der Browser, welche Methode er anwenden soll?
Standardmäßig wird GET verwendet, gemäß Konvention / Spezifikation, da dies gesetzlich vorgeschrieben ist, wenn Sie eine URL eingeben und die Eingabetaste drücken
Enthält die vom Server gesendete Google Mail-Seite den Methodennamen, der beim Aufrufen der Google Mail-Erstellungsanforderung verwendet werden soll?
Dies ist eine der Schlüsselsachen, auf die ich in den obigen Kommentaren hinweise. Im modernen Web geht es nicht einmal mehr um Seiten. Sobald die Seiten Dateien auf der Festplatte waren, wurde diese vom Browser abgerufen. Dann wurden sie zu Seiten, die überwiegend dynamisch generiert wurden, indem Daten in eine Vorlage eingefügt wurden. Es ging jedoch immer noch um den Prozess "Neue Seite vom Server anfordern, Seite abrufen, Seite anzeigen". Das Auswechseln der Seiten wurde wirklich raffiniert; Sie haben nicht gesehen, wie sie geladen und in der Größe verändert wurden und ihr Layout verschoben wurde, so dass es flüssiger wurde, aber es war immer noch der Browser, der eine ganze Seite oder einen Teil einer Seite durch eine andere ersetzte
Die moderne Art, Dinge zu tun, ist mit einer einzigen Anwendung. Der Browser hat ein Dokument im Speicher, das auf eine bestimmte Art und Weise angezeigt wird, Skriptaufrufe an thebservr und ein paar Informationen zurückerhält und das Dokument so bearbeitet, dass ein Teil der Seite sich visuell ändert, um die neuen Informationen anzuzeigen - das Ganze läuft ohne der Browser lädt jemals eine andere neue Seite; Es ist einfach eine Benutzeroberfläche geworden, in der Teile wie bei einer typischen Client-App wie Word oder Outlook aktualisiert werden. Neue Elemente werden über anderen Elementen angezeigt und können durch das Simulieren von Dialogfenstern usw. gezogen werden. All dies Ist das Browser-Skriptmodul, das Anforderungen mit der vom Entwickler gewünschten http-Methode sendet, Daten zurückruft und auf das vom Browser gezeichnete Dokument zugreift. Sie können sich vorstellen, dass der moderne Browser ein brillantes Gerät ist, das so etwas wie ein gesamtes Betriebssystem oder ein virtueller Computer ist. Ein programmierbares Gerät, das eine ziemlich standardisierte Methode zum Zeichnen von Objekten auf dem Bildschirm, zum Abspielen von Tönen, zum Erfassen von Benutzereingaben und zum Senden zur Verarbeitung bietet. Alles, was Sie tun müssen, um Ihre Benutzeroberfläche zeichnen zu lassen, ist, sie mit etwas HTML / CSS zu versehen, mit dem eine Benutzeroberfläche erstellt wird, und dann das HTML ständig zu optimieren, damit der Browser ändert, was er zeichnet. Zum Teufel, die Leute sind es so gewohnt, dass eine einzelne Seiten-App die URL programmgesteuert ändert, obwohl gerade keine Navigation (Anforderung ganz neuer Seiten) ausgeführt wird Alles, was Sie tun müssen, um Ihre Benutzeroberfläche zeichnen zu lassen, ist, sie mit etwas HTML / CSS zu versehen, mit dem eine Benutzeroberfläche erstellt wird, und dann das HTML ständig zu optimieren, damit der Browser ändert, was er zeichnet. Zum Teufel, die Leute sind es so gewohnt, dass eine einzelne Seiten-App die URL programmgesteuert ändert, obwohl gerade keine Navigation (Anforderung ganz neuer Seiten) ausgeführt wird Alles, was Sie tun müssen, um Ihre Benutzeroberfläche zeichnen zu lassen, ist, sie mit etwas HTML / CSS zu versehen, mit dem eine Benutzeroberfläche erstellt wird, und dann das HTML ständig zu optimieren, damit der Browser ändert, was er zeichnet. Zum Teufel, die Leute sind es so gewohnt, dass eine einzelne Seiten-App die URL programmgesteuert ändert, obwohl gerade keine Navigation (Anforderung ganz neuer Seiten) ausgeführt wird
Wenn wir www.gmail.com aufrufen, muss die GET-Methode verwendet werden. Woher weiß der Browser, dass diese Methode zu verwenden ist?
Wahr. Weil es spezifiziert ist. Die erste Anforderung ist, wie es in der Vergangenheit immer der Fall war, HTML-Code zu erhalten, um eine Benutzeroberfläche zu zeichnen, sie dann entweder für immer anzustupsen und zu manipulieren oder eine andere Seite mit einem anderen Skript zu erhalten, das die Benutzeroberfläche anstößt und manipuliert und eine reaktive Benutzeroberfläche erstellt
Wie einige Antworten zeigen, können wir mit der DELETE-Methode neue Benutzer erstellen. Dies wirft dann die Frage auf, welche Absicht hinter den Methoden des http-Protokolls steckt, denn letztendlich hängt es völlig von den Servern ab, welcher Funktion sie eine URL zuordnen möchten . Warum sollte der Client den Servern mitteilen, welche Methoden für eine URL verwendet werden sollen?
Geschichte. Erbe. Theoretisch könnten wir morgen alle http-Methoden wegwerfen. Wir befinden uns auf einem Programmierniveau, bei dem Methoden veraltet sind, da URLs so weit verarbeitet werden können, dass sie dem Server als Vermittlungsmechanismus anzeigen, auf dem Sie die Daten speichern möchten den Körper als Entwurf einer E-Mail oder einen Entwurf löschen - es befindet sich keine Datei / emails / draft / save / 1234 auf dem Server - der Server ist so programmiert, dass er diese URL auseinander nimmt und weiß, was mit dem Körperdatenspeicher zu tun ist es als Entwurf einer E-Mail unter der ID 1234
Es ist also durchaus möglich, Methoden abzuschaffen, abgesehen von der enormen Menge an Kompatibilität, die um sie herum entstanden ist. Es ist besser, sie nur für das zu verwenden, was Sie brauchen, aber sie weitgehend zu ignorieren und stattdessen alles zu verwenden, was Sie brauchen, um Ihr Ding zum Laufen zu bringen. Wir brauchen immer noch Methoden, da Sie sich daran erinnern müssen, dass sie etwas für den Browser und den Server bedeuten, auf dem wir unsere Apps erstellt haben. Das clientseitige Skript möchte den zugrunde liegenden Browser zum Senden von Daten verwenden. Es muss eine Methode verwenden, mit der der Browser die angeforderten Anforderungen erfüllt - wahrscheinlich ein POST, da GET alle variablen Informationen in die URL packt und die Länge begrenzt ist in vielen Servern. Der Client möchte eine lange Antwort vom Server - verwenden Sie keinen HEAD, da er überhaupt keine Antwortkörper haben soll.