Hypertext Transfer Protocol (HTTP)

 

Das Hypertext Transfer Protocol (HTTP) ist ein Protokoll zur Übertragung von Daten über ein Netzwerk. Es wird hauptsächlich eingesetzt, um Webseiten und andere Daten aus dem World Wide Web (WWW) in einen Webbrowser zu laden.

 
HTTP im TCP/IP-Protokollstapel
Anwendung HTTP
Transport TCP
Netzwerk IP
Netzzugang Ethernet Token
Ring
FDDI ...

Datenübertragung in Netzwerken ist ein komplexes Problem. Um dieses zu lösen, unterteilt man es in mehrere triviale Probleme und bildet diese in Schichtenmodellen ab. Jede Schicht ist für die Lösung eines solchen trivialen Problems verantwortlich und bietet diese der darüberliegenden Schicht als Dienstleistung an. Das HTTP bildet die sogenannte Anwendungsschicht, über der die Modelle keine weiteren Schichten vorsehen. Die Anwendungsschicht wird von den Anwendungsprogrammen angesprochen, im Fall des HTTP ist dies meistens der Webbrowser. Im (heute kaum noch in der Praxis anzutreffenden) ISO/OSI-Schichtenmodell entspricht die Anwendungsschicht Schicht 7. Das im Internet angewendete TCP/IP-Referenzmodell sieht die Anwendungsschicht in Schicht 4.

HTTP ist ein zustandsloses Protokoll. Das bedeutet, dass nach erfolgreicher Datenübertragung die Verbindung zwischen den beiden Kommunikationspartnern nicht aufrecht erhalten wird. Sollen weitere Daten übertragen werden, muss zunächst eine weitere Verbindung aufgebaut werden.

Durch Erweiterung seiner Anfragemethoden, Header-Informationen und Fehlercodes ist das HTTP allerdings nicht auf Hypertext beschränkt, sondern wird zunehmend zum Austausch beliebiger Daten verwendet. Zur Kommunikation ist HTTP auf ein zuverlässiges Transportprotokoll angewiesen. In nahezu allen Fällen wird hierfür TCP verwendet.


Protokollversionen

Derzeit werden zwei Protokollversionen, HTTP/1.0 und HTTP/1.1 verwendet.

Bei HTTP/1.0 wird vor jeder Anfrage eine neue TCP-Verbindung aufgebaut und nach Übertragung der Antwort wieder geschlossen. Sind in ein HTML-Dokument beispielsweise zehn Bilder eingebettet, so werden insgesamt elf TCP-Verbindungen benötigt, um die Seite auf einem grafikfähigen Browser aufzubauen. In der Version 1.1 können mehrere Anfragen und Antworten pro TCP-Verbindung gesendet werden. Für das HTML-Dokument mit zehn Bildern wird so nur eine TCP-Verbindung benötigt. Da die Geschwindigkeit von TCP-Verbindungen zu Beginn auf Grund des Slow-Start-Algorithmus recht gering ist, wird so die Ladezeit für die gesamte Seite signifikant verkürzt. Zusätzlich können bei HTTP/1.1 abgebrochene Downloads fortgesetzt werden. Informationen aus früheren Anforderungen gehen verloren (zustandsloses Protokoll). Über Cookies in den Header-Informationen können aber Anwendungen realisiert werden, die Statusinformationen (Benutzereinträge, Warenkörbe) zuordnen können. Dadurch können Webanwendungen, die Status- bzw. Sitzungseigenschaften erfordern, realisiert werden. Auch eine Benutzerauthentifizierung ist möglich. Normalerweise kann die Information, die über HTTP übertragen wird, auf allen Rechnern und Routern, die im Netzwerk durchlaufen werden, gelesen werden. Über HTTPS kann die Übertragung verschlüsselt erfolgen.

Eine Möglichkeit zum Einsatz von HTTP/1.1 in Chats ist die Verwendung des MIME-Typs multipart/replace, bei dem der Browser nach Sendung eines Boundary-Codes und einem neuerlichen Content-Length-Header sowie eines neuen Content-Type-Headers den Inhalt des Browserfensters komplett erneuert.

Mit HTTP/1.1 ist es neben dem Holen von Daten auch möglich, Daten zum Server zu übertragen. Mithilfe der PUT-Methode können so Webdesigner ihre Seiten direkt über den Webserver per WebDAV publizieren, und mit der DELETE-Methode ist es ihnen möglich, Daten vom Server zu löschen.

Außerdem bietet HTTP/1.1 eine TRACE-Methode, mit der man den Weg zum Webserver verfolgen kann und überprüfen kann, ob die Daten korrekt dorthin übertragen werden. Mithilfe dieser Methode ergibt sich die Möglichkeit, den Weg zum Webserver über die verschiedenen Proxies hinweg zu ermitteln, ein traceroute auf Anwendungsebene.


HTTP Request-Methoden

  • GET ist die gebräuchliste Methode. Mit ihr werden Inhalte vom Server angefordert.

  • POST ähnelt der GET-Methode, nur daß ein zusätzlicher Datenblock übermittelt wird. Dieser besteht üblicherweise aus Name/Wert-Paaren, die aus einem HTML-Formular stammen. Grundsätzlich können Daten auch mittels GET übertragen werden (als Parameter im URI), aber die zulässige Datenmenge ist bei POST deutlich größer.

  • HEAD weist den Server an, die gleichen HTTP-Header wie ein GET oder POST, nicht jedoch das Dokument selbst senden. So kann z.B. schnell die Gültigkeit einer Datei im Browsercache geprüft werden.

  • PUT dient dazu, Dateien unter Angabe des Ziel-URIs auf einen Webserver hochzuladen. Kaum implementiert.

  • DELETE löscht die angegebene Datei auf dem Server. Kaum implementiert.

  • TRACE liefert die Anfrage so zurück, wie der Server sie empfangen hat. So kann überprüft werden, ob und wie die Anfrage auf dem Weg zum Server verändert worden ist – sinnvoll für das Debugging von Verbindungen.

  • OPTIONS liefert eine Liste der vom Server unterstützen Methoden und Features.

  • CONNECT wird von Proxy-Servern implementiert, die in der Lage sind, SSL-Tunnel zur Verfügung zu stellen.


HTTP Statuscodes

  • 1xx: Informationen

    • 100: Continue

    • 101: Switching Protocols

  • 2xx: Erfolgreiche Operation

    • 200: OK

    • 201: Created

    • 202: Accepted

    • 203: Non-Authoritative Information

    • 204: No Content

    • 205: Reset Content

    • 206: Partial Content

  • 3xx: Umleitung

    • 300: Multiple Choices

    • 301: Moved Permanently

    • 302: Found

    • 303: See Other

    • 304: Not Modified

    • 305: Use Proxy

    • 307: Temporary Redirect

  • 4xx: Client-Fehler

    • 400: Bad Request

    • 401: Unauthorized

    • 402: Payment Required (in HTTP/1.1 noch nicht spezifiziert)

    • 403: Forbidden

    • 404: Not Found

    • 405: Method Not Allowed

    • 406: Not Acceptable

    • 407: Proxy Authentication Required

    • 408: Request Time-out

    • 409: Conflict

    • 410: Gone

    • 411: Length Required

    • 412: Precondition Failed

    • 413: Request Entity Too Large

    • 414: Request-URI Too Large

    • 415: Unsupported Media Type

    • 416: Requested range not satisfiable

    • 417: Expectation Failed

  • 5xx: Server-Fehler

    • 500: Internal Server Error

    • 501: Not Implemented

    • 502: Bad Gateway

    • 503: Service Unavailable

    • 504: Gateway Time-out

    • 505: HTTP Version not supported