Das HTTP-Protokoll

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 Parameter q wird der Suchbegriff Android mitgeliefert

  • Mit 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.

Nach oben