Das Hypertext Transfer Protokoll (HTTP) wurde in einer ersten Version bereits 1989 von Sir Tim Berners-Lee als Basis für eine einfache Kommunikation über ein Netzwerk entwickelt. Ziel war ein schneller Austausch von Nachrichten zwischen den Teams am Kernforschungszentrum CERN in der Schweiz. Bis heute basieren jedwede Kommunikation und jeglicher Datentransfer im Internet zwischen einem Server und einem Browser auf diesem Basisprotokoll. Inzwischen wurden jedoch viele Protokollergänzungen, vor allem im Bereich der Sicherheit, hinzugefügt und ein effizienterer Verbindungsaufbau etabliert.
Aufbau und Funktion des HTTP-Protokolls
Um im Internet kommunizieren zu können, müssen 2 Parteien miteinander und untereinander Daten austauschen können. Einer der Parteien fragt eine Information bei einem Server an, der Anbieter der Daten antwortet daraufhin mit dem Senden der entsprechenden Nachrichten. Für einen reibungslosen Ablauf muss ein Protokoll das hierfür verwendete Format und Regelwerk definieren. Mit dem HTTP-Protokoll werden dahingehend grundsätzlich 2 Funktionsblöcke definiert:
HTTP Message-Header als Kopfteil, der die META-Informationen wie Inhaltstypen und etwaige Kodierungen definiert
HTTP Message-Body als Nachrichtenteil, der letztendlich die gewünschten Informationen enthält
Wenn nun ein Nutzer eine Suchanfrage (HTTP-Request) in seinem Browser öffnen möchte, so wird der verwendete Domainname (Bspw. http://www.google.com) zuerst in eine entsprechende Internetadresse übersetzt, damit der Zielserver auch erreicht werden kann. An diesen wird dann die Anfrage weitergeleitet und ausgewertet. Im Message-Header findet der Server nun weitere wichtige Informationen zur Suchanfrage (Bspw. https://www.google.com/search?q=Android&ie=utf-8&oe=utf-8&client=firefox-b-ab) in folgender Form:
search?q=Android
bezeichnet hierbei eine Suchanfrage, die an den Google-Server gerichtet wird. In dem HTTP Query Parameterq
wird der SuchbegriffAndroid
mitgeliefertMit Folgeparametern
&ie=utf-8
bzw.oe=utf-8
, die grundsätzlich mit dem kaufmännischen Undzeichen als Trennzeichen eingeleitet werden, wird die vom Nutzerbrowser verwendete Zeichenkodierung (hier UTF-8) deklariert.In einem weiteren Parameter
&client=firefox-b-ab
wird dem Server übermittelt, welche Browser-Anwendung (hier Mozilla Firefox) der Benutzer verwendet.
Auf diese Anfrage hin kann der Server nun die entsprechenden Daten zusammenstellen und als Antwort (HTTP-Response) an den Nutzer zurücksenden.
HTTP-Methoden
Um eine erfolgreiche Kommunikation zwischen Client (Nutzer) und Server (Empfänger) herstellen zu können, verwendet das HTTP-Protokoll verschiedene Methoden für den Datentransfer. Mit diesen können unterschiedliche Aktionen durchgeführt und auch direkt am Server ausgeführt werden. Folgende Kurzdarstellung zeigt die unter HTTP 1.1 verfügbaren Methoden auf:
Methode | Beschreibung |
---|---|
GET | Fordert eine Ressource an (Bsp. HTML-Datei, Image, etc.) |
POST | Dient der Übertragung von umfangreicheren Daten |
PUT | Adressiert gezielt eine Ressource. Weist den Server diese anzulegen oder zu ersetzen |
PATCH | Führt partielle Änderungen an einer Ressource durch |
DELETE | Löscht eine durch die URL bezeichnete Ressource vom Server |
HEAD | Fordert den RESPONSE-Header vom Server an |
OPTIONS | Ermöglicht dem Client die Ermittlung der verfügbaren HTTP-Methoden und Kommunikationsparameter |
TRACE | Erstellt eine Verfolgungsliste eines HTTP-Requests zwischen Client und Server |
CONNECT | Dient dem Aufbau eines Übertragungstunnels zwischen Client und Server |
HTTP-Methoden GET und POST im Detail
Die beiden am häufigsten eingesetzten Methoden sind dabei:
Methode | Beschreibung |
---|---|
GET | Mit dieser Methode wird eine Ressource wie beispielsweise eine Webseite angefordert. |
POST | Mit dieser Methode können der Anfrage weitere Daten zur Verarbeitung angefügt und vom Server ausgewertet werden. Die Daten werden in der Regel als Wertepaare (z.B. name=Muster; vorname=Manfred etc.) codiert. |
GET-Request
Das folgende Beispiel zeigt eine GET Anfrage. Der Server liefert inhaltlich einen Chart für Devision an den Client aus.
GET /devisen/chart HTTP/1.1
Host: www.mydomain.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:61.0) Gecko/20100101
Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
POST-Request
Wenn sich beispielsweise ein Benutzer auf einer Webseite für einen Newsletter registriert, wird oftmals die HTTP-Methode POST verwendet. In dem HTTP Request werden die Daten aus dem Web-Formular an den Server übertragen und anschließend ausgewertet.
POST /newsletter HTTP/1.1
Host: www.mydomain.com
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 170
Connection: keep-alive
anrede Herr
email mmusterhaus@testdomain.de
mode register
pass mamust
user Manfred Musterhaus
Die eigentlichen Anmeldedaten werden jedoch nicht im URL übertragen, sondern hier als Wertepaare mit einer Trennzeile an den Header angefügt. Der Server kann die Daten dann entsprechend interpretieren und verarbeiten. Per POST können auch sehr große Datenmengen übertragen werden.
Status-Codes
Auf eine entsprechende Anfrage mit einer GET
oder POST
Methode antwortet ein Server in der Regel mit einem Response-Header. Der Aufbau des Headers enthält unter anderem auch einen Statuscode mit einer Klartextmeldung, der Rückschlüsse auf den Erfolg der Anfrage zulässt.
Im Folgenden ist ein Erfolgsfall zu sehen. Der Status 204 - NO_CONTENT
informiert den Client lediglich über eine erfolgreiche Verarbeitung der Anfrage seitens des Servers, liefert selbst jedoch keinen Body aus. Dieses Verfahren reduziert den Traffic zwischen Client und Server.
HTTP/1.1 204 NO_CONTENT
Location: https://www.mydomain.com
Server: Apache
Connection: Keep-Alive
Content-Length: 0
Um die Vielzahl an Statusmeldungen abbilden zu können, sind diese in insgesamt 5 Klassen mit den folgenden Meldungsbereichen unterteilt worden.
Status-Codes | Beschreibung |
---|---|
100 – 199 | Statusmeldungen mit rein informellen Inhalten wie Weiterleitung, etc. |
200 – 299 | Repräsentiert die erfolgreiche Verarbeitung seitens des Servers |
300 – 399 | Den Transfer betreffende Meldungen wie Move-Temporarily, etc. |
400 – 499 | Fehlermeldungen, Fehler die auf den Client zurückzuführen sind, wie Bad Request, etc. |
500 – 599 | Fehlermeldungen, Fehler die vom Server her ausgelöst werden, wie Internal Server Error, etc. |
Fazit
Mit dem HTTP-Protokoll stehen für die Kommunikation im Internet entsprechende Regeln, Methoden und Status-Codes zur Verfügung. Damit wird sichergestellt, dass alle Beteiligten ein einheitliches Verfahren zum Informations- und Datenaustausch nutzen. Da es sich hier jedoch um ein „zustandsloses“ Protokoll handelt, werden in Web-Anwendungen teilweise noch zusätzliche Verfahren wie Sessions eingesetzt. Moderne Web-Anwendungen hingegen unterstützen auch die zustandslose HTTP Kommunikation.