Wenn zwei Rechner miteinander sprechen möchten, müssen Sie sich auf ein Protokoll einigen. Dieses regelt, wie die Kommunikation untereinander abläuft: “Wer macht was, wann?” Häufig wird dafür TCP verwendet. Die Kommunikation ist dabei in kleine Pakete aufgeteilt, die hin und her geschickt werden. Kommt ein Paket an, wird dies durch ein sog. Acknowledgement quittiert - so weiß der Gegenüber, dass die Kommunikation erfolgreich war.

HTTP, das HyperText Transfer Protocol, ist eines der meist verwendeten Protokolle des Internets und baut auf TCP auf. Wie der Name schon sagt, ist es besonders für die Übertragung von “HyperText”, also dynamisch strukturierten Textes (z.B. Webseiten oder Datenrepräsentationen), ausgelegt. Das Protokoll wird durch RFC 2616 definiert.

Standardmäßig sind HTTP-Dienste auf Port 80 zugänglich, verschlüsselte HTTPS-Dienste (als HTTP mit TLS, einem Protokoll für verschlüsselten Netzwerkverkehr) auf Port 443. Wichtig ist: HTTP ist ein zustandsloses Protokoll, vorhergehende Anfragen werden sind also nicht relevant für die Bearbeitung der aktuellen Anfrage.

Anfrage

Möchte man HTTP verwenden, so öffnet man eine TCP-Verbindung mit dem Ziel-Server und sendet seine HTTP-Anfrage. Es folgt eine exemplarische Anfrage, wie sie z.B. ein Web-Browser stellen würde:

GET /index.html HTTP/1.1
Host: hpi.de
Accept: text/html
User-Agent: Chromium 16.7

Die erste Zeile enthält wichtige Informationen:

  • das Verb der Anfrage ist GET, es ist also ein einfacher Lesezugriff
  • der angefragte Pfad ist /index.html
  • das verwendete Protkoll ist HTTP in Version 1.1

In den darauffolgenden Zeilen folgen nun sogenannte Header. Diese sind Meta-Daten der Anfrage, in diesem Fall werden die folgenden Header mitgeschickt:

  • Host: Welche Seite angefragt wurde. Wichtig, falls von einem Server mehrere Seiten ausgeliefert werden.
  • Accept: Was als Rückgabe erwartet wird. In diesem Beispiel ein HTML-Dokument.
  • User-Agent: Informationen über den anfragenden Client.

HTTP kennt neben GET noch einige weitere Verben, unter anderem POST, PUT, DELETE und PATCH. Die Bedeutung dieser Verben wird hier definiert und hier gut erklärt.

Antwort

Nachdem die HTTP-Anfrage verschickt wurde, bearbeitet der Server diese und sendet seine Antwort. Die Antwort auf unsere exemplarische Anfrage könnte zum Beispiel wie folgt aussehen:

HTTP/1.1 200 OK
Content-Type: text/html

<h1>
  Hello World!
</h1>

In der ersten Zeile steht nun neben dem Antwort-Protokoll eine sog. Status-Code, der die Art der Antwort beschreibt. Im Bespiel ist das Status 200 “OK”, also ist alles in Ordnung. Neben dem 200er-Status gibt es noch einige weitere: 3xx (Umleitung), 4xx (Fehler auf Client-Seite), 5xx (Fehler auf Server-Seite). Eine ausgiebige Liste findet sich auf httpstatuses.com, eine schöne Adaption mit Katzenbildern findet sich hier.

In den nächsten Zeilen folgen dann wieder Header (wie in den Anfragen). An Content-Type: text/html kann der Browser ablesen, dass er den späteren Inhalt der Anfrage als HTML interpretieren soll.

Durch eine Leerzeile getrennt folgt nun die eigentliche Antwort: Ein HTML-Hello-World. Es könnte aber auch z.B. auch eine maschinenlesbare Datenrepräsentation oder ein Bild zurückgegeben werden, HTTP macht hier keine Einschränkungen.

Header sind ein wichtiges Konzept des HTTP-Protokolls. Sie sind sowohl in Anfragen als auch in Antworten enthalten und repräsentieren wichtige Meta-Informationen zu den übertragenen Inhalten.

Über Header werden z.B. die Authentifzierung (Login), Cache-Parameter, HTTPs- und Sicherheitseinstellungen oder Cookies übertragen. Einen Überblick über häufig verwendete Header findet sich hier, einen Einblick in Caching-Header kann man hier bekommen und hier findet sich eine Historie zum User-Agent-Header.

REST

Inzwischen hat sich ein großes Ökosystem rund um HTTP gebildet, und auch für die Entwicklung von Entwickler-Schnittstellen haben sich Standards herauskristallisiert. Besonders weit verbreitet ist dabei REST, welches Roy Fieldings in Kapitel 5: Representational State Transfer (REST) seiner Doktorarbeit beschrieb.

Conclusion

HTTP ist ein sehr weit verbreitetes Protokoll, die meisten Entwickler arbeiten täglich damit. Weil der HTTP-Standard eine der wenigen Konstanten in der schnelllebigen Welt der Webentwicklung ist, lohnt es sich doppelt, sich damit zu beschäftigen.

Falls ihr weitere Fragen zu HTTP und Konsorten habt, stellt sie gerne in den Kommentaren, dann erweitere ich diesen Post :)