Wer im Internet unterwegs ist, um nach Informationen zu suchen, Preisvergleiche durchzuführen,
Einkäufe zu erledigen oder sich mit Gleichgesinnten auszutauschen, wird sich kaum des Umstands bewusst, dass im Hintergrund ein
reger Datenaustausch zwischen dem Browser seines Endgerätes und mindestens einem Server abläuft. Ohne diesen Datenaustausch
wäre eine Kommunikation zwischen Clients und Servern nicht möglich.
Obwohl ein Durchschnitts-User im eigenen Interesse dem Thema Datenschutz nicht völlig ahnungslos und desinteressiert
gegenüberstehen sollte, mit der technischen Umsetzung brauchen sich dennoch nur Entwickler, Programmierer und IT-Spezialisten
auseinander zu setzen.
Entwickler und Programmierer von Webanwendungen sollten sich hingegen gut mit den Datenaustausch zwischen Clients und Servern
auskennen, der wechselseitig erfolgt und aus Anfragen und Antworten besteht, die allgemein als Requests und Responses bezeichnet
werden.
Der Datenaustausch und die Kommunikation erfolgt im einfachsten Fall zwischen einem Webbrowser als Client und einem Server, auf
dem die gewünschten Informationen eingebettet in einer HTML-Datei zum Abruf bereitliegen. Doch auch der Server kann zum Client
werden, zum Beispiel dann, wenn die HTML-Datei dynamisch erzeugt wird und der gewünschte Inhalt der HTML-Seite vor dem Parsen
erst von einem anderen Server per XML angefordert werden muss. Für die Beispiele auf dieser Seite soll jedoch als Client ein
Webbrowser genügen, in dem die URI einer aufzurufenden Seite eingegeben und mit einem Klick bestätigt wird.
Bei Eingabe einer URI in der Adresszeile eines Browsers und einem bestätigenden Klick oder bei einem Klick auf einen Link innerhalb einer HTML-Webseite, sendet der Browser (Client) eine Anfrage (Request) an den Server. Für die Übertragung wird dabei das HTTP Protokoll genutzt (insofern nicht HTTPS vorgesehen ist) und für den Transport das TCP Protokoll. Der vom Browser gesendete HTTP-Header der Anfrage ist wie folgt aufgebaut, wobei weitere Angaben möglich sind:
GET /request-und-response-18.html HTTP/1.1
Host: www.coder-welten.de
User-Agent: Mozilla/5.0 (weitere Angaben ...
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
Connection: keep-alive
Die Zeilen des Request-Headers im Einzelnen:
Für die Anfrage wurde die GET-Methode verwendet, da diese Methode es erlaubt, mit der URI dem Webserver
weitere Daten zu übermitteln. Die zusätzlichen Daten werden dabei als Parameter-Werte Paare in einem QueryString verpackt. Der
QueryString mit den Parameter-Werte Paaren wird der URI, getrennt durch ein Fragezeichen, hinzugefügt.
Nachdem ein Server eine Anfrage erhalten hat, wird er diese beantworten, in dem eine entsprechende Nachricht an den Browser übermittelt wird. Diese Antwort besteht im einfachsten Fall nur aus einem HTTP Response-Header, der unter anderen den HTTP-Statuscode enthält. Der Statuscode wird auch bei auftretenden Fehlern, Zugriffsverletzungen oder bei Weiterleitungen gesendet. Ist die vom Browser gewünschte Ressource hingegen verfügbar, wird diese im Body der Antwort übermittelt. Der HTTP Response-Header (Message-Header) und der HTTP Response-Body (Message-Body) werden lediglich durch eine Leerzeile getrennt übermittelt. Ein Beispiel:
HTTP/1.1 200 OK
Date: Mon, 11 Mar 2013 11:17:09 GMT
Server: Apache
X-Powered-By: PHP/5.3.8
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 832
Keep-Alive: timeout=1, max=100
Connection: Keep-Alive
Content-Type: text/htm
<!DOCTYPE html>
<html>
<head>
<title>Eine HTML-Seite</title>
</head>
<body>
<div style="text-align:center">
<h1>Eine HTML-Seite</h1>
<p>Mit wenig oder viel Content.</p>
</div>
</body>
</html>
Die Zeilen des Response-Headers im Einzelnen:
Wie bereits erwähnt, folgt nach dem Response-Header eine Leerzeile, an der sich der HTTP Response-Body mit dem übermittelten Inhalt der Nachricht anschließt. Bei einer Webseite besteht dieser Inhalt aus HTML oder einer erweiterten Auszeichnungssprache.