HTTP - Hypertext Transfer Protocol
HTTP ist das Kommunikationsprotokoll im World Wide Web (WWW). Die wichtigsten Funktionen sind Dateien vom Webserver anzufordern und zum Browser zu schicken. Der Browser übernimmt dann die Darstellung von Texten und Bilder und kümmert sich um das Abspielen von Audio und Video.
Das Hypertext Transfer Protocol (HTTP) im Schichtenmodell
Schicht | Dienste / Protokolle / Anwendungen | |||
---|---|---|---|---|
Anwendung | HTTP | IMAP | DNS | SNMP |
Transport | TCP | UDP | ||
Internet | IP (IPv4 / IPv6) | |||
Netzzugang | Ethernet, ... |
Wie funktioniert HTTP?
Die Kommunikation findet nach dem Client-Server-Prinzip statt. Der HTTP-Client (Browser) sendet seine Anfrage an den HTTP-Server. Dieser bearbeitet die Anfrage und schickt seine Antwort zurück. Nach der Antwort durch den Server ist diese Verbindung beendet. Typischerweise finden gleichzeitig mehrere HTTP-Verbindungen statt.
Die Kommunikation zwischen Client und Server findet auf Basis von Meldungen im Text-Format statt. Die Meldungen werden standardmäßig über TCP auf dem Port 80 abgewickelt. Die Meldungen werden Request und Response genannt und bestehen aus einem Header und den Daten. Der Header enthält Steuerinformationen. Die Daten entsprechen einer Datei, die der Server an den Client schickt oder im umgekehrten Fall Nutzereingaben, die der Client zur Verarbeitung an den Server übermittelt. Dateien kann der Server aber nur mit Hilfe eines zusätzlichen Programms oder Skriptes entgegennehmen.
HTTP-Adressierung
Damit der Server weiß, was er dem HTTP-Client schicken soll, adressiert der HTTP-Client eine Datei, die sich auf dem HTTP-Server befinden muss. Dazu wird vom HTTP-Client eine URL an den HTTP-Server übermittelt:
http://Servername.Domainname.Top-Level-Domain:TCP-Port/Pfad/Datei
z. B. http://www.elektronik-kompendium.de:80/sites/kom/0902231.htm
Die URL besteht aus der Angabe des Transport-Protokolls "http://". Dann folgt der Servername (optional) und der Domainname mit anschließender Top-Level-Domain (TLD). Die Angabe zum TCP-Port ist optional und nur erforderlich, wenn die Verbindung über einen anderen Port, als dem Standard-Port 80 abgewickelt wird. Pfade und Dateien sind durch den Slash "/" voneinander und von der Server-Adresse getrennt. Folgt keine weitere Pfad- oder Datei-Angabe schickt der Server die Default-Datei der Domain. Sind Pfad und/oder Datei angegeben, schickt der HTTP-Server diese Datei zurück. Ist diese Datei nicht existent, versucht er es mit einer Alternative. Gibt es keine, wird die Standard-Fehlerseite (Error 404) an den HTTP-Client übermittelt.
HTTP-Request
Der HTTP-Request ist die Anfrage des HTTP-Clients an den HTTP-Server. Ein HTTP-Request besteht aus den Angaben Methode, URL und dem Request-Header. Die häufigste Methoden sind GET und POST. Dahinter folgt durch ein Leerzeichen getrennt die URL und die verwendete HTTP-Version. In weiteren Zeilen folgt der Header und bei der Methode POST durch eine Leerzeile (!) getrennt die Formular-Daten.
HTTP-Request-Header
- Methode URL HTTP/Version
- General Header
- Request Header
- Entity Header (optional)
- Leerzeile (!)
- Request Entity (falls vorhanden)
Beispiel für einen HTTP-Request-Header
Im folgenden wird der HTTP-Request-Header dargestellt, den der Browser an den Webserver schickt.
GET / HTTP/1.1 Host: www.elektronik-kompendium.de User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive
HTTP-Methoden
Jeder HTTP-Request durch den Client wird durch die Angabe einer Methode eingeleitet. Die Methode weißt den Server an, was er mit dem Request machen soll. Die HTTP Version 1.1 sieht die folgenden Methoden vor:
- GET
- POST
- HEAD
- PUT
- OPTIONS
- DELETE
- TRACE
- CONNECT
Methode | Beschreibung |
---|---|
GET | Die GET-Methode dient der Anforderung einer HTML-Datei oder einer anderen Quelle. Die Quelle wird durch die URL adressiert. Im Header lassen sich Bedingungen hinterlegen, die die Netzlast reduzieren oder einen unterbrochenen Datentransfer wieder aufnehmen. Über GET lassen sich auch Formular-Daten übermitteln. Diese werden in codierter Form der URL angehängt. URL und Formular-Daten sind durch ein Fragezeichen (?) voneinander getrennt. |
POST | Die POST-Methode funktioniert ähnlich wie die GET-Methode. POST wird jedoch zur Übermittlung von Formular-Daten an ein Programm oder Skript verwendet. Die Daten werden im Entity-Bereich getrennt durch eine Leerzeile vom Header übertragen. |
HEAD | Die HEAD-Methode fordert den Response-Header an, der üblicherweise vom Server nach einem GET-Request übermittelt wird. |
PUT | Diese Methode erlaubt das Erstellen oder Ändern von Dateien auf dem Server. |
OPTIONS | Die OPTIONS-Methode dient zur Ermittlung von Kommunikationsoptionen durch den HTTP-Client. Es werden jedoch keinerlei Aktionen ausgeführt oder Daten übertragen. |
DELETE | Diese Methode führt zur Löschung der Datei, die durch die URL adressiert ist. |
TRACE | Die TRACE-Methode dient der Verfolgung von HTTP-Requests, die zwischen Client und Server über einen oder mehrere Proxy-Server laufen. Im Header-Feld "Via" des HTTP-Responses sind alle zwischengeschaltete Server protokolliert. |
CONNECT | Durch die CONNECT-Methode baut ein Proxy-Server einen Tunnel zum angegebenen Rechner auf und übermittelt darin Daten und Kommandos zwischen Client und Server. |
HTTP-Response
Der HTTP-Response ist die Antwort des HTTP-Servers an den HTTP-Client. Der HTTP-Response besteht aus der verwendeten HTTP-Version, dem Status-Code der Responses und der Klartext-Meldung des Status-Codes. In den anschließenden Zeilen folgt der Header und durch eine Leerzeile (!) getrennt die HTML-Datei.
HTTP-Response-Header
- HTTP/Version Response-Code (Status)
- Klartext-Meldung (Reason)
- General Header
- Response Header
- Entity Header (optional)
- Leerzeile (!)
- Resource Entity (falls vorhanden)
Beispiel für einen HTTP-Response-Header
Im folgenden wird der HTTP-Response-Header dargestellt, den der Webserver an den Browser schickt und dem eine Datei folgt. Im folgenden wird nur die HTML-Datei zurück geliefert. Aufgrund Referenzierungen in der HTML-Datei schickt der Browser weitere HTTP-Requests an den Server. Er fordert weitere Dateien an. Zum Beispiel CSS, Javascript, Bilder, Audio oder Video.
HTTP/1.x 200 OK Date: Tue, 08 Sep 2009 15:47:06 GMT Server: Apache/1.3.34 Ben-SSL/1.55 Keep-Alive: timeout=2, max=200 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html
HTTP-Response-Codes / HTTP-Status-Codes
Die Antwort des HTTP-Servers an den HTTP-Client enthält in der ersten Zeile den Status-Code und die Klartext-Meldung des HTTP-Responses, verursacht durch den HTTP-Request. Der Status-Code ist eine 3stellige Nummer, die dem HTTP-Client Informationen über die Verfügbarkeit der angeforderten Daten mitteilt. Z. B. wird über den Status-Code eine Fehlermeldung übermittelt.
Die Status-Codes sind in 5 Gruppen unterteilt, die über den HTTP-Response eine Grundaussage treffen.
Status-Codes | Beschreibung |
---|---|
100-199 | Status-Codes im 100er Bereich sind Meldungen informeller Art. |
200-299 | Status-Codes im 200er Bereich informieren den Client über eine erfolgreiche Anfrage. |
300-399 | Status-Codes im 300er Bereich deuten auf eine Umleitung hin und weisen den Client an, seine Anfrage auf das zurückgelieferte Ziel zu wiederholen oder den Benutzer die Entscheidung treffen zu lassen. |
400-499 | Status-Codes im 400er Bereich sind Fehlermeldungen, die vom Client ausgelöst werden. Meistens handelt es sich um eine Anfrage, die vom Server nicht beantwortet werden kann. |
500-599 | Status-Codes im 500er Bereich sind Fehlermeldungen, die vom Server direkt ausgelöst werden. |
Liste der HTTP-Response-Codes
Status-Code | Meldung EN | Meldung DE | HTTP-Version |
---|---|---|---|
100 | Continue | Weiterleitung | 1.1 |
101 | Switching Protocols | Protokoll ändern | 1.1 |
200 | OK | Alles in Ordnung / Standardmeldung | 1.0 |
201 | Created | Erfolgreich erstellt | 1.0 |
202 | Accepted | Akzeptiert | 1.0 |
203 | Non-Authoritative Information | Die Daten sind von einem anderen Server | 1.0 |
204 | No Content | Ausführung ohne Feedback | 1.0 |
205 | Reset Content | Datenversendung nicht möglich | 1.1 |
206 | Partial Content | Datenversendung in mehreren Teilen | 1.1 |
300 | Multiple Choices | Datei ist mehrfach vorhanden | 1.0 |
301 | Moves Permanently | Datei ist dauerhaft verschoben | 1.0 |
302 | Moves Temporarily | Datei ist vorübergehend verschoben | 1.0 |
303 | See Other | Datei ist an einem andern Ort | 1.0 |
304 | Not Modified | Datei ist unverändert | 1.0 |
305 | Use Proxy | Datei über Proxy anfordern | 1.0 |
400 | Bad Request | Keine Bearbeitung | 1.0 |
401 | Unauthorized | Nicht autorisiert | 1.0 |
402 | Payment Required | Kostenpflichtige Daten | 1.0 |
403 | Forbidden | Zugriff verweigert | 1.0 |
404 | Not Found | Nicht gefunden | 1.0 |
405 | Method not Allowed | Methode nicht erlaubt | 1.1 |
406 | Not Acceptable | Anfrage nicht akzeptiert | 1.1 |
407 | Proy Authorisation Required | Nicht autorisierter Proxy | 1.1 |
408 | Request Timeout | Zeitüberschreitung | 1.1 |
409 | Conflict | Zugriff gesperrt | 1.1 |
410 | Gone | Daten wurden verschoben | 1.1 |
411 | Length Required | Längenangaben erforderlich | 1.1 |
412 | Precondition Failed | Vorbedingungen nicht erfüllt | 1.1 |
413 | Request Entity Too Long | Anfrage zur Bearbeitung zu lang | 1.1 |
414 | Request URL Too Long | Adresse zu lang | 1.1 |
415 | Unsupported Media Type | Nicht unterstützter MIME-Type | 1.1 |
416 | Requested Range Not Satisfiable | Angegebener Bereich ist falsch | 1.1 |
417 | Expectation Failed | Vorraussetzung ist nicht erfüllt | 1.1 |
500 | Internal Server Error | Interner Server Fehler | 1.0 |
501 | Not Implemented | Nicht implementierte Anfrage | 1.0 |
502 | Bad Gateway | Gatewayfehler | 1.0 |
503 | Service Unavailable | Server ueberlastet | 1.0 |
504 | Gateway Timeout | Zeitüberschreitung Gateway | 1.1 |
505 | HTTP Version not supported | Nicht unterstützte HTTP-Version | 1.1 |
Erläuterung der häufig auftretenden Status-Codes
Status-Code | Beschreibung |
---|---|
200 | Dieser Status-Code wird bei jeder erfolgreich bearbeiteten Anfrage übermittelt. |
401 | Zugriffe auf passwortgeschützte Bereiche eines Servers werden dem Client mit diesem Code verwehrt. Nur wenn der Client sich nach diesem Code autorisiert, bekommt er Zugriff auf die Dateien und Verzeichnisse. (Siehe unter HTTP-Authentifizierung) |
404 | Immer dann, wenn keine HTML-Datei zurückgeliefert werden kann, dann erfolgt die Rückmeldung eines 404-Errors. Meistens liefert der Server eine Standard-Fehlerseite zurück. |
500 | Ein HTTP-Server kann nicht nur HTML-Dateien schicken, sondern auch Programme und Skripte ausführen, die HTML-Daten zurückliefern. Kommt es bei der Ausführung zu einem Fehler, bricht der Server den Vorgang ab und liefert diese Fehlermeldung zurück. |
HTTP-Authentifizierung
Manche Informationen und Daten auf einem Webserver sind nicht für jedermann bestimmt und sollen nur einer begrenzten Zahl von Personen zugänglich sein. Dazu gibt es das Basic-HTTP-Authentication-Schema, das einen Benutzernamen und ein Passwort für die Authentifizierung verwendet.
Der Ablauf der Authentifizierung beginnt mit einem normalen HTTP-Request durch den HTTP-Client. Ist der Zugriff auf das angefragte Verzeichnis durch Basic-HTTP-Authentication beschränkt, sendet der HTTP-Server den HTTP-Response mit einem WWW-Authentication-Header-Feld und dem Status-Code 401 (Nicht autorisiert). Der HTTP-Client wird damit zum Senden von Benutzernamen und Passwort aufgefordert. Der HTTP-Client öffnet dann ein Fensterchen, das den Benutzer zur Eingabe von Benutzername und Passwort auffordert. Nach abgeschlossener Eingabe schickt der HTTP-Client die Zugangsdaten an den Server. Sind die Daten korrekt, wird der Zugriff auf die angeforderten Inhalte freigegeben und vom Server ausgeliefert. Bei jedem erneuten HTTP-Request werden die Anmeldedaten erneut vom Client an den Server übermittelt.
Sind die Zugangsdaten inkorrekt, hat der Benutzer mehrmals die Möglichkeit für eine korrekte Eingabe zu sorgen. Gehen diese Anfragen alle schief, wird ein Status-Code von 403 und einer entsprechenden HTML-Datei vom Server geschickt, die den Besucher auf den fehlerhaften Zugriff des passwortgeschützten Bereichs hinweist.
Der Authentifizierungsvorgang mit Basic-HTTP-Authentication ist alles andere als sicher. Die Anmeldedaten werden in Klartext und damit protokollierbar und abhörbar übertragen. Um diese Schwäche zu vermeiden empfiehlt sich das Digest Access Authentication. Dieses benutzt mehrere Parameter zur Verschlüsselung.
HTTP-ABR - HTTP Adaptive Bit Rate
HTTP-ABR ist ein Verfahren, um Videostreaming per HTTP zu übertragen. Eigentlich ist HTTP ein Kommunikationsprotokoll, dass einzelne Dateien überträgt, die irgendwann vollständig übertragen sind. Beim Videostreaming findet eine Ende der Übertragung erst sehr viel später statt. Hier gibt es im Prinzip kein Ende, es sei denn Sender und Empfänger beenden die Verbindung.
Beim Videostreaming kommen jedoch noch weitere besondere Anforderungen zum Tragen, um dem Nutzer das multimediale Erlebnis so angenehm wie möglich zu machen.
Die Anforderungen an das Video-Material können je nach Teilnehmer seht unterschiedlich sein. So kann die Bildschirmgröße von Smartphone bis Full-HD-TV reichen. Und die Bandbreite von vielleicht 100 kBit/s bis 100 MBit/s. Konsequenterweise müsste der HTTP-Server die unterschiedlichen Qualitäts- und Geschwindigkeitsanforderungen berücksichtigen. Mit HTTP-ABR lässt sich die Übertragungsrate an die verfügbare Bandbreite und unterschiedliche Auflösungen anpassen. Dazu ist auf beiden Seiten ein HTTP-ABR-fähiger Client bzw. Server notwendig.
Neben dem normalen HTTP-ABR gibt es noch verschiedene propritäre Varianten.
- HLS von Apple
- HSS von Microsoft
- HDS von Adobe
- MPEG-DASH (Dynamic Adaptive Straming over HTTP), ISO-Standard
Aufgaben und Übungen mit dem Raspberry Pi
Für den Raspberry Pi gibt es verschiedene Webserver. Am einfachsten ist es mit dem "lighttpd". Hier muss man am wenigsten konfigurieren und die Installation ist effektiv mit einem Befehl auf der Kommandozeile erledigt.