/ Security

HTTP: Ein Blick hinter die Kulissen des Internets

Wenn man genauer darüber nachdenkt, grenzt es eigentlich schon fast an Magie. Man gibt eine Zeichenkette in die Adresszeile seines Browsers ein, drückt einmal kurz auf Enter und schon sieht man den Wetterbericht für das Wochenende oder die neuesten Fußballergebnisse. Aber haben Sie schon einmal darüber nachgedacht, was alles im Hintergrund abläuft, bis Sie zu Ihrem Leidwesen feststellen müssen, dass der TSV Grünkraut schon wieder verloren hat? HTTP spielt dabei eine zentrale Rolle.

Als normaler Benutzer nimmt man es kaum wahr, stünde es nicht am Anfang so vieler URLs, dabei beruht die Kommunikation im gesamten World Wide Web auf dem HTTP Protokoll. In diesem Artikel wollen wir uns daher den sogenannten HTTP Request-Response-Zyklus genauer ansehen, also alles was von der Eingabe der URL bis zum Anzeigen der Webseite im Browser, im Hintergrund abläuft.

HTTP Nachrichten: Request & Response

HTTP steht für "Hypertext Transfer Protocol". Mittlerweile wird es hauptsächlich dazu verwendet Webseiten aus dem WWW in einen Webbrowser zu laden. Die "Kommunikationseinheiten" in HTTP werden als Nachrichten bezeichnet. Prinzipiell gibt es zwei unterschiedliche Arten von HTTP Nachrichten. Die Anfrage (bzw. Request) geht vom Benutzer (in diesem Zusammenhang oft Client genannt) an den Server. Die Antwort (bzw. Response) geht als Reaktion darauf vom Server zum Benutzer. Sehen wir uns dazu ein Beispiel an.

Ein Benutzer (nennen wir ihn Herbert) möchte eine Webseite aufrufen, z.B. den Steine & Unkraut Onlineshop. Herbert möchte sich die neu hinzugekommenen Produkte ansehen und zwar aus der Kategorie "Steine". Er tippt daher folgende URL in seinen Browser ein: http://www.SteineundUnkraut.org /Neu/Steine.html
Der Browser sendet daraufhin eine HTTP Anfrage an den Server, auf dem die Webseite des Onlineshops liegt. Dieser verarbeitet die Anfrage und sendet eine HTTP Antwort. Aber wie sieht so eine HTTP Nachricht konkret aus?

HTTP Nachrichten: Aufbau

Eine typische HTTP Nachricht besteht aus 3 Teilen, der Start-Line, dem Nachrichtenkopf (bzw. Header) und dem Nachrichtenrumpf (bzw. Body). Die Informationen, die in diesen drei Teilen stehen, sind abhängig davon ob die HTTP Nachricht eine HTTP Anfrage oder eine HTTP Antwort ist.

HTTP Anfrage

Die Start-Line in einer HTTP Anfrage enthält zunächst die Methode, ein Kommando, das dem Server sagt, was er eigentlich tun soll. Zwei sehr bekannte Beispiele für HTTP Methoden sind zum einen GET (sagt dem Server, dass er Daten an den Benutzer senden soll) und POST (sagt dem Server, dass er Daten in der Datenbank speichern soll). In unserem Beispiel wäre die Methode also GET, da Herberts Browser vom Server Daten (die Webseite) anfordert.

Als nächstes in der Start-Line steht die URI, nicht zu verwechseln mit der URL. URIs werden zur Identifizierung benutzt und URLs zur Lokalisierung. Aber Vorsicht, Lokalisierung bedeutet gleichzeitig auch Identifizierung. Zum Beispiel kann man einen Menschen ja auch anhand seines Wohnorts identifizieren. Es sind also alle URLs gleichzeitig URIs. Es gibt allerdings URIs, die keine URLs sind.
Z.B. ist SteineundUnkraut.org eine URI und http://www.SteineundUnkraut.org eine URL, da die Webseite nicht nur identifiziert wird, sondern HTTP uns auch zeigt, wo die Ressource (die Webseite) ist. Zum Schluss der Start-Line teilt der Browser noch mit, welche HTTP Version er benutzt. Die Start-Line aus unserem Beispiel könnte also so aussehen: GET /Neu/Steine.html HTTP 1.0

Die Anfrage Header sind im Prinzip Paare, bestehend aus einem Namen (Groß- und Kleinschreibung müssen beachtet werden), gefolgt von einem Doppelpunkt und einem Wert. Header spezifizieren bestimmte Regeln und Informationen, z.B. den Host. Das ist die Adresse des Servers, an den wir die Anfrage schicken. In den Headern kann man aber z.B. auch spezifizieren, welche Sprache der Client als Antwort akzeptiert (Accept-Language). Die Request Header in unserem Beispiel könnten also so aussehen:
Host: www.SteineundUnkraut.org
Accept-Language: de

Einen HTTP Anfrage Body brauchen wir an dieser Stelle, in unserem Beispiel nicht.

HTTP Antwort

In der Start-Line der HTTP Antwort gibt es keine Methode oder URI. Hier haben wir nur die HTTP Version und einen Status Code. Dieser Status Code sagt dem Benutzer, ob die Anfrage erfolgreich war oder fehlgeschlagen ist. Status Code 200 gibt "OK" zurück und bedeutet, dass die Anfrage erfolgreich bearbeitet wurde und das Ergebnis in der Antwort übertragen wird. Der Code dagegen, den wohl jeder Internetbenutzer kennt: 404 gibt "not found" zurück und bedeutet, dass die angeforderte Ressource nicht gefunden wurde. Es gibt aber noch viele andere. Status Code 418 gibt z.B. zurück "I'm a teapot" und zeigt an, dass der Server sich weigert Kaffee zu kochen, da er eine Teekanne ist. Diese Fehlermeldung ist Teil des "Hyper Text Coffee Pot Control Protocol" und war als Erweiterung für HTTP gedacht – aber nur als Aprilscherz. Dennoch wurde der Fehler von humorvollen Entwicklern auch in bekannte Software-Projekte implementiert (z.B. Googles Programmiersprache Go).

Die Antwort Header haben das gleiche Format wie die Anfrage Header. Allerdings kann man damit andere Informationen und Regeln spezifizieren. Zum Beispiel den Zeitpunkt des Absendens (Date) oder Informationen über den verwendeten Webserver. Die Response Header in unserem Beispiel könnten also z.B. so aussehen:
Date: Tue, 27 Feb 2018 08:12:31 GMT
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)

Der Antwort Body enthält dann die gewünschten Daten, also die Webseite.

Je nach Methode, HTTP Version, etc. muss man andere oder aber auch gar keine Header senden. Man kann aber aus den offiziellen, im HTTP-Standard definierten Headern so viele auswählen und senden, wie man für nötig erachtet. In der Regel gibt es übrigens nicht nur eine HTTP Anfrage und HTTP Antwort, sondern mehrere. Zum Beispiel für ein Bild, das sich auf der Webseite befindet, gibt es nochmal einen extra Austausch.

Sicherheit durch HTTP Header

HTTP Header spielen auch aus sicherheitstechnischen Aspekten eine große Rolle. Sie sind z.B. ein einfaches Mittel die Besucher einer Webseite aktiv zu schützen. Wie genau das funktioniert und welche HTTP Header Sie unbedingt setzen sollten, erfahren Sie in einem unserer nächsten Blogposts.

Sofern Sie jetzt gleich schon prüfen möchten, ob diese wichtigen Header bei Ihnen gesetzt sind, registrieren Sie sich bei Enginsight und testen Sie unsere Plattform 14 Tage lang kostenlos.