Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
| schulung:http [2021/12/05 23:34] – [Aber wie sieht ein wohldefinierter Request aus?] Thomas | schulung:http [2022/01/31 15:09] (aktuell) – [Was macht es dann zu einem Protokoll?] Thomas | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== HTTP ====== | ====== HTTP ====== | ||
| + | {{gallery> | ||
| - | Nachdem jetzt klar ist, wie grundsätzlich | + | Nachdem jetzt klar ist, wie grundsätzlich zwischen zwei Rechnern // |
| {{ : | {{ : | ||
| Dafür müssen sie sich auf eine gemeinsame Sprache verabreden, das ist das | Dafür müssen sie sich auf eine gemeinsame Sprache verabreden, das ist das | ||
| Zeile 10: | Zeile 11: | ||
| Der Name scheint aus einer anderen Zeit zu stammen. Tatsächlich ist HTTP gar nicht so alt wie das Internet: | Der Name scheint aus einer anderen Zeit zu stammen. Tatsächlich ist HTTP gar nicht so alt wie das Internet: | ||
| - | * RFC 1945 HTTP/1.0 (1996) | + | * [[https:// |
| * RFC 2616 HTTP/1.1 (1999) | * RFC 2616 HTTP/1.1 (1999) | ||
| * RFC 7540 HTTP/2 (2015) | * RFC 7540 HTTP/2 (2015) | ||
| Zeile 20: | Zeile 21: | ||
| Es geht nicht nur um Text im landläufigen Sinn. Der Text enthält selbst noch Metadaten, die Formatierung und Textsatz ermöglichen und (ganz wichtig) es sind Elemente mit Interaktion möglich. Zuerst nur //Links//, die zu einem anderen Dokument verweisen, aber auch Formularelemente o.ä.. | Es geht nicht nur um Text im landläufigen Sinn. Der Text enthält selbst noch Metadaten, die Formatierung und Textsatz ermöglichen und (ganz wichtig) es sind Elemente mit Interaktion möglich. Zuerst nur //Links//, die zu einem anderen Dokument verweisen, aber auch Formularelemente o.ä.. | ||
| - | Der Name steht für eine Gattung | + | Der Name steht für eine Gattung |
| **H**yper**t**ext **M**arkup **L**anguage | **H**yper**t**ext **M**arkup **L**anguage | ||
| Zeile 38: | Zeile 39: | ||
| - Der Browser (ein TCP-Client) stellt dem Server eine wohldefinierte Anfrage. | - Der Browser (ein TCP-Client) stellt dem Server eine wohldefinierte Anfrage. | ||
| - | - Der Server antwortet auf demselben TCP-Kommuniationskanal exakt auf diese Anfrage mit einem Status-Code (OK oder irgend ein Fehler) | + | - Der Server antwortet auf demselben TCP-Kommuniationskanal exakt auf diese Anfrage mit einem Status-Code (OK oder irgend ein Fehler) und in einem Rutsch mit dem angefragten Inhalt. |
| - Danach wird der Kommunikationskanal wieder abgebaut (so war das zumindest ganz zu Beginn, mittlerweile wartet der Server auf der einmal aufgebauten TCP-Verbindung, | - Danach wird der Kommunikationskanal wieder abgebaut (so war das zumindest ganz zu Beginn, mittlerweile wartet der Server auf der einmal aufgebauten TCP-Verbindung, | ||
| Zeile 44: | Zeile 45: | ||
| Ganz so einfach ist das heutzutage alles auch nicht mehr. Aber ein minimalistischer Webserver könnte genau so funktionieren. So ein Server ist beispielsweise ein sogenannter " | Ganz so einfach ist das heutzutage alles auch nicht mehr. Aber ein minimalistischer Webserver könnte genau so funktionieren. So ein Server ist beispielsweise ein sogenannter " | ||
| + | |||
| + | > **Erinnerung: | ||
| + | {{: | ||
| + | |||
| ===== Aber wie sieht ein wohldefinierter Request aus? ===== | ===== Aber wie sieht ein wohldefinierter Request aus? ===== | ||
| Zeile 53: | Zeile 58: | ||
| Aber man muss sich an eine strikte Konvention halten, damit der Text der Anfrage/des Requests auch von jeder Maschine einfach interpretiert werden kann und nicht kompliziert analysiert werden muss. Folgende Regeln muss der Browser beim Zusammenbau des Request einhalten: | Aber man muss sich an eine strikte Konvention halten, damit der Text der Anfrage/des Requests auch von jeder Maschine einfach interpretiert werden kann und nicht kompliziert analysiert werden muss. Folgende Regeln muss der Browser beim Zusammenbau des Request einhalten: | ||
| - | Der Text beginnt mit der ersten Zeile und dem ersten Zeichen, Leerzeichen sind Trenner zwischen den einzelnen Bestandteilen. | + | * Der Text beginnt mit der ersten Zeile und dem ersten Zeichen, Leerzeichen sind Trenner zwischen den einzelnen Bestandteilen. |
| - | Das erste Wort ist ein Kommando, das beiden Seiten bekannt sein muss und im jeweils aktuellen RFC definiert wird: GET, POST, HEAD usw. | + | |
| - | Danach folgt als zweites Wort die sogenannte // | + | |
| + | * Zum Schluss wird die HTTP-Version genannt: '' | ||
| Das ist der Mindestsatz an Informationen. Die Anfrage wird mit einer leeren Zeile beendet. | Das ist der Mindestsatz an Informationen. Die Anfrage wird mit einer leeren Zeile beendet. | ||
| - | Heutige Browser sind äußerst geschwätzig und übermitteln darüber hinaus (also vor der Leerzeile) noch jede Menge Zusatzinformation, | + | |
| {{ : | {{ : | ||
| - | * HTTP Version | + | Je nach HTTP Version |
| - | * Browser-Typ (z.B." | + | |
| - | * Landessprache | + | |
| - | * unterstützte Dokumenttypen (außer HTML) | + | |
| - | * Cookie-Werte von vorherigen Besuchen dieses Servers | + | |
| - | Ab HTTP 1.1 folgt nach der Zeile mit dem Kommando (also z.B. "GET / | + | * '' |
| + | * '' | ||
| + | |||
| + | |||
| + | Ab HTTP 1.1 folgt nach der Zeile mit dem Kommando (also z.B. "GET / | ||
| < | < | ||
| - | Server: www.qgelm.de | + | Host: www.qgelm.de |
| </ | </ | ||
| zum Beispiel. | zum Beispiel. | ||
| - | Das hat erst mal nichts mit der IP-Adresse des Servers zu tun. Aber es ist durchaus üblich, dass ein Server mit einer IP-Adresse | + | Es ist durchaus üblich, dass ein Server mit einer IP-Adresse |
| Der Server schaut dann, wie er den Inhalt der angeforderten Ressource bekommt und packt das wie folgt in seinen // | Der Server schaut dann, wie er den Inhalt der angeforderten Ressource bekommt und packt das wie folgt in seinen // | ||
| {{ : | {{ : | ||
| * Er nennt das verwendete Protokoll mit Version also z.B. '' | * Er nennt das verwendete Protokoll mit Version also z.B. '' | ||
| - | * Wenn alle glatt lief folgt dann der Statuscode mit Zahl und Kurzbeschreibung '' | + | * Wenn alles glatt lief folgt dann der Statuscode mit Zahl und Kurzbeschreibung '' |
| * Bis hier war alles in einer Zeile. Die nächsten Zeilen können dann weitere sogenannte // | * Bis hier war alles in einer Zeile. Die nächsten Zeilen können dann weitere sogenannte // | ||
| - | * Die eigentlich übermittelte Ressource folgt dann nach einer Leerzeile und wird einfach angehängt. | + | * Die eigentlich übermittelte Ressource folgt dann nach einer Leerzeile und wird einfach |
| + | |||
| + | Der RFC für Version 1.0 definiert den übermittelten Statuscode übrigens so: | ||
| + | |||
| + | < | ||
| + | Status-Code | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | </ | ||
| + | |||
| + | Wenn man nicht (unbemerkt) meistens den Status '' | ||
| Kommen wir nach der Vorrede zu einem einfachen [[schulung: | Kommen wir nach der Vorrede zu einem einfachen [[schulung: | ||