CSS, HTML und Javascript mit {stil}

Der HTTP-Request

HTTP-Request – Client / Server Kommunikation

Für die Kommunikation im Internet werden Protokolle eingesetzt. Protokolle regeln den Nachrichtenaustausch und die Formatierung von Daten zwischen Client (z.B. Browser) und Server.

Die prominentesten Protokolle des Internets sind HTTP (Hypertext Transfer Protocol) und FTP (File Transfer Protocol). POP3 ist ein Protokoll für den Emailabruf, SSH (Secure Shell) ein verschlüsseltes Terminal für den Remote Zugang zum Server.

Wenn der Benutzer eine Adresse in das Adressfeld seines Browsers eingibt oder ein Formular an die Adresse im action-Attribut absendet, wird die Adresse als HTTP-Request an den Server geschickt. Der Browser ist der HTTP-Client und der Server ist der HTTP-Server.

Die Webseite mit ihren Resourcen wird nicht in einem Rutsch übertragen, sondern Datei für Datei. CSS-Dateien, Javascript-Dateien und Bilder der HTML-Seite erfordern weitere HTTP-Requests.

HTTP ist ein zustandloses Protokoll. Nach einer Datenübertragung muss die Verbindung zwischen dem Client und dem Server nicht aufrecht erhalten werden.

Ablauf beim HTTP-RequestVerbindungsaufbauRequestResponseVerbindungsabbau
Ablauf beim HTTP-Request

Bei der Übertragung weiterer Daten muss der Client eine neue Verbindung aufbauen, die nichts über den vorangegangenen Ablauf weiß. Für eine Webseite mit vier Bildern und einem Stylesheet waren beim HTTP 1.0-Protokol sechs Anfragen erforderlich, das HTTP 1.1-Protokoll hingegen kann mehrere Anfragen und Antworten innerhalb einer Verbindung austauschen und abgebrochene Verbindungen fortsetzen.

Cookies und Query-Strings

Aber auch mit HTTP 1.1 hat das HTTP-Protokoll kein Gedächtnis. Um Informationen von einer HTML-Seite auf die nächste Seite zu schaffen (z.B. bei mehrseitigen Formularen) müssen Verfahren wie Cookies, Query-Strings oder PHP-Session benutzt werden.

Wenn der Browser die Seite das erste Mal anfordert, bekommt er eine Set Cookie-Anweisung.

HTTP/1.1 200 OK 
Date => Sun, 04 Oct 2015 05:49:54 GMT
Server => Apache
Content-Type => text/html; charset=UTF-8
Document-Cookie => theme=twenty; Expires=Mon, 04 Oct 2021 08:35:14 GMT

Der HTTP 200-Code bestätigt, dass die Seite erfolgreich geladen wurde. Wenn das Cookie nicht erneut aufgefrischt oder gelöscht wird, wird der Browser das Cookie bei jeder Anfrage mitsenden.

Cookie – Informationsaustausch zwischen Browser und Webseite
Cookie – Informationsaustausch zwischen Browser und Webseite

Wenn keine Cookies, sondern Query-Strings das Gedächtnis bilden – z.B. bei mehrseitigen Formularen – folgt der URL eine lange Zeichenkette. PHP Sessions hinterlassen ebenfalls ein Cookie, aber das Cookie ist ein verschlüsselter Session Key. Die Nutzinformationen liegen in der Datenbank auf dem Server.

Auf jeden Fall aber müssen die Informationen bei jedem Request ausgetauscht werden. Darum wurde mit HTML5 das Konzept des Web Storage eingeführt: Dann speichert der Browser die relevanten Informationen.

HTTP-Request und HTTP-Response

Nach dem Aufbau einer Verbindung zum Server überträgt der HTTP-Client einen Request in einem festgelegten Format:

  • eine Anfangszeile
  • eine Reihe von Headerzeilen (bei HTTP 1.0 optional, in HTTP 1.1 muss die Zeile Host im Request angegeben werden)
  • eine Leerzeile
  • eine Nachricht (optional)

Die dreiteilige Anfangszeile besteht aus dem Namen der Methode, dem Pfad zur angeforderten Resource und der verwendeten HTTP-Version. Eine typische Anfrage kann folgendermaßen aussehen

HTTP 1.0 Request
GET /test.html HTTP/1.0
HTTP 1.1 Request

(Angabe einer voll qualifizierten URL und die Headerzeile HOST erforderlich)

GET http://wisotop.de/test.html HTTP/1.1
HOST: wisotop.de

Headerzeilen senden zusätzliche Informationen über den Request oder die Daten des Nachrichtenbodys, z.B. die gewünschte Sprache. Jede Headerzeile vermerkt ein Name-/Wertpaar, wobei Name und Wert durch einen Doppelpunkt getrennt werden.

User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; de; rv:1.8.0.4)
            Gecko/20060508 Firefox/1.5.0.4
Accept: */*

Das Acceptfeld signalisiert dem Server, welche Formate der Client akzeptiert. Da moderne Server nahezu alle Formate verarbeiten können, wird meist der Mime-Typ */* verwendet.

HTTP-Response

Als Antwort auf einen derartigen Request sendet der Server eine HTTP-Response, wobei die erste Zeile auch als Statuszeile bezeichnet wird. In dieser Zeile gibt der Server die HTTP-Version als Echo zurück sowie einen Response-Statuscode im Form von drei Ziffern und eine kurze Textnachricht, die als Reason Phase bezeichnet wird.

HTTP/1.1 200 OK
Server: Apache/2.0.49 
Content-Language: de
Content-Type: text/html
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/312.8

Der Response-Statuscode und die Reason Phase sind Klartext-Mitteilungen derselben Nachricht, wobei die Reason Phase von Server zu Server ein wenig variieren kann.

1** - Information
Informationsmeldungen
2**—Success
Die Anfrage wurde erfolgreich durchgeführt
200 - OK
Die Anfrage war erfolgreich
204 - No Content
Das Dokument enthält keine Daten
3**—Redirected
für eine erfolgreiche Bearbeitung der Anfrage werden weitere Informationen benötigt
301 - Moved Permanently
Das angefragte Dokument ist dauerhaft zu einer anderen URI umgezogen
4**—Client error
Wahrscheinlich liegt die Ursache für das Scheitern einer Anfrage beim Client
401 - Not Authorized
Der Request muss vom Benutzer authentifiziert werden
403 - Forbidden
Der Server weist den Request zurück
404 - Not Found
Die angeforderte Resource existiert nicht
5**—Server error
500 - Internal Server Error
wahrscheinlich liegt die Ursache des Scheitern einer Anfrage bei Server
501 - Not Implemented
503 - Service Unavailable

Die Antwort kann ebenfalls Headerzeilen enthalten, von denen jede aus einem Header und einem Wertepaar besteht.

HTTP Status Code: HTTP/1.1 200 OK
Server: Apache/2.0.49 (Linux/SuSE)
Date: Thu, 13 Jul 2006 07:19:43 GMT
Content-Type: text/html
Connection: close

Die HTTP-Request-Methoden

GET
Inhalte vom Server anfordern.
POST
Inhalte vom Server anfordern und zusätzlich einen Datenblock aus Name-/Wertpaaren (z.B. aus einem Formular) übermitteln. Grundsätzlich können Daten auch mit GET übertragen werden, aber die zulässige Datenmenge bei POST ist größer.
HEAD
weist den Server an, den HTTP-Header, nicht jedoch den Inhalt des Dokuments zu senden. So kann z.B. die Existenz einer gelinkte Seite geprüft werden.
PUT
Dateien auf den Webserver laden. Wird aus Sicherheitsgründen kaum implementiert.
DELETE
löscht die Datei auf dem Server. Wird aus Sicherheitsgründen kaum implementiert.
TRACE
liefert die Anfrage so zurück, wie der Server sie empfangen hat. Wird z.B. für das Debuggen von Verbindungen benutzt, ist aber auf vielen Servern aus Sicherheitsgründen nicht implementiert.
CONNECT
wird von Proxy-Servern implementiert