Inhaltsverzeichnis

HTTP

HTTP (HyperText Transfer Protocol) ist das Standardübertragungsprotokoll im WWW. Es baut in der Regel auf TCP auf. Jede HTTP-Interaktion zwischen Client und Server besteht aus einer Anfrage des Clients und einer Antwort des Servers.

Struktur der Anfragen (requests) und Antworten (responses)

Die wichtigsten Requestparameter

Die wichtigsten Responseparameter

Aufgabe 1: Developer Tools nutzen

Jeder Browser hat sogenannte Devloper Tools integriert, die es Website-Entwicklern ermöglichen, das Document Object Model einer Website zu analysieren und Einblick in die Kommunikation des Browsers zu nehmen.

  1. Öffnen Sie Ihren Browser und gehen Sie auf eine beliebige Webseite.
  2. Drücken Sie die F12-Taste. Es öffnet sich ein zweites Fenster mit den Developer-Tools des Browsers.
  3. Öffnen Sie dort den Reiter "Netzwerk".
  4. Drücken Sie die F5-Taste, damit der Browser die Webseite erneut lädt. Sie sehen im Netzwerk-Reiter eine Auflistung aller HTTP-Requests, die zum Laden der Webseite nötig waren.

Cookies

Zustandslose (stateless) vs. zustandsbehaftete (stateful) Protokolle
Bei zustandsbehafteten (stateful) Protokollen verwalten die Kommunikationspartner während der Kommunikation einen Zustand, bei zustandslosen (stateless) Protokollen nicht.

Beispiele:

  • IP ist zustandslos: Jedes IP-Paket wird unabhängig von allen anderen Paketen versandt und auch empfangen. Vor dem Empfang eines IP-Pakets weiß die IP-Schicht des Empfängerrs nicht, dass es kommen wird und nach dem Empfang weiß sie nicht, ob noch weitere kommen werden.
  • TCP ist zustandsbehaftet: Die TCP-Schicht hat die Aufgabe, sicherzustellen, dass alle Pakete, die den Empfänger nicht erreichen, nochmals versandt werden. Dazu müssen Sender und Empfänger speichern, welcher Teil der Daten bereits versandt/empfangen wurde.
  • HTTP ist zustandslos: Der Client sendet einen HTTP-Request, der Server antwortet mit einer HTTP-Response. Danach "vergisst" der Server den Client wieder.

Problem:
HTTP ist zustandslos, viele Webseiten sind es aber nicht. Stellen Sie sich vor, sie kaufen in einem Online-Shop ein. Auf der Startseite geben Sie Ihren Benutzernamen und Ihr Passwort ein, dann klicken Sie auf "OK". Der Browser sendet die Daten jetzt per HTTP-Request an den Server, der liefert prüft ihre Zugangsdaten mithilfe Ihres Kundendatensatzes in seiner Datenbank und liefert eine Begrüßungsseite zurück ("Hallo Silvia, …"). Da HTTP zustandslos ist, bleibt die Verbindung danach nicht erhalten. Beim nächsten Request an den Server (Sie klicken vielleicht auf ein Item, um es in den Einkaufskorb zu legen…) weiß dieser nicht mehr, dass der Request von Ihnen stammt.

  • Kurze Frage dazwischen: Der Client könnte doch bei jedem Request den Benutzernamen mitschicken, dann wüsste der Server immer, dass Sie es sind … ?

Das HTTP-Protokoll sah anfangs keine Möglichkeit vor, mithilfe der der Server feststellen kann, dass der zweite Request (Item in den Einkaufskorb legen) vom selben User stammt wie der erste (Login).

Lösung: Cookies
Die Cookie Specification (RFC 2109) sieht vor, dass der Webserver im HTTP Response-Header mithilfe des Parameters Set-Cookie beliebige Schlüssel-Wert-Paare (key value pairs) mitliefern kann. Der Browser speichert diese und zeigt sie jedesmal dann, wenn ein Request an dieselbe Domain versandt wird, dem Server wieder vor. In der Praxis sieht das so aus:

Praktisches Beispiel: Session-Cookies

Cookies zu Marketing- und Werbezwecken (third party cookies)

Das Geschäftsmodell von Firmen wie Google und Facebook beseht darin, Werbung zu vermarkten (online marketing). Dabei können sie für Werbebanner und Links in Suchergebnislisten umso mehr Gebühren verlangen, je besser die Nutzer, die die Werbung zu sehen bekommen, zum beworbenen Produkt/Service passen.

Aufgabe 2: Werbung für ein Klassik-Konzert
Eine Eventagentur organisiert ein Konzert der Münchner Philharmoniker im Stadttheater Ingolstadt. Gespielt wird die 9. Symphonie von Beethoven. Um das Konzert publik zu machen soll auch Onlinewerbung geschaltet werden. Die Agentur beauftragt beispielsweise Facebook mit dem Schalten von Werbeeinblendungen in Timelines und Google mit dem Einblenden des Links zu Ihrer Homepage in Suchergebnislisten. Je Werbeeinblendung/Klick auf eine Suchergebnis muss die Agentur einen bestimmten Betrag (i.d.R. mehrere Cent bis hin zu einstelligen Euro-Beträgen) je Klick auf eine Werbung bzw. auf ein Suchergebnis zahlen. Damit dieses Geld nicht umsonst investiert ist (was nutzt es der Agentur, wenn ein Nutzer in Indonesien ihre Werbung zu sehen bekommt) kann sie bei Beauftragung der Werbung einschränken, dass diese nur für bestimmte Nutzergruppen angezeigt wird:

  • Wohnort im Umkreis von 150 km um Ingolstadt
  • Alter: 40 - 70 Jahre
  • Bruttoeinkommen: > 50 000 €/Jahr
  • Interesse an klassischer Musik

Versuchen Sie durch Recherche/Überlegung folgende Fragen zu beantworten:

  • a) Beim Klick auf die Werbung fürs Konzert soll der Browser die Homepage der Konzertagentur öffnen. Wie erfahren Google/Facebook von diesem Klick, so dass sie ihn abrechnen können?
  • b) Wie können Firmen wie Facebook/Google sicherstellen, dass die Werbeeinblendungen/Links in Suchergebnissen nur (oder zumindest überwiegend) bei der oben beschriebenen Nutzergruppe erscheinen?

Öffnet ein User eine Webseite (z.B. shoes-for-cats.com), auf der sich ein Like-Button von Facebook, eine von Google geschaltete Werbeanzeige o.ä. befindet, so sendet der Browser einen Request an Facebook/Google/…, um die Grafik zu laden. Dieser Request könnte beispielsweise so aussehen:

GET /likebutton.png HTTP/1.1
Host: www.facebook.com
User-Agent: Mozilla/4.0 (Windows NT)
Referer: shoes-for-cats.com/lightblue/cotton.html
Origin: shoes-for-cats.com
Cookie: user=Kodfk4988724lkj

Durch die Request-Header Referer (mit Pfad) und Origin (ohne Pfad) erfährt Facebook, auf welcher Seite der Like-Button steht. Wird eine Werbegrafik angefordert, so bekommt der Ad-Seller i.d.R. auch noch eine id als Parameter mitgeliefert die er vorher vertraglich mit dem Betreiber von www.shoes-for-cats.com vereinbart hat. Auch aus dieser kann er zweifelsfrei die Seite ermitteln, auf der der Nutzer gerade surft. Der Request-Header für die Werbung sieht dann etwa so aus:

GET /ad.png?id=23Jlk34jia HTTP/1.1
Host: www.googleads.com
Cookie: user=Kodfk4988724lkj
...

Sie werden sich wundern, wieso der Browser den Requests ein Cookie beifügt. Genaugenommen tut er dies nur, wenn der User

  • in letzter Zeit schon mal auf einer Seite gesurft hat, auf der Werbung von Google/Facebook zu sehen war oder
  • ein Google-Konto/Facebook-Konto besitzt und das Cookie beim Besuch von GMail, Facebook, dem Google-Kalender, … gesetzt wurde.

Beim Ausliefern der oben angeforderten Bilder jedenfalls versäumen es Google/Facebook nicht, ein Cookie zu setzen:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Content-Length: 1745
Content-Type: image/x-png
Set-Cookie: user=Kodfk4988724lkj; Expires=2025-01-20 00:00 GMT

Mithilfe solcher Cookies ist es großen Werbenetzwerken (es gibt nicht nur Google und Facebook…) möglich, das Surfverhalten von Nutzer/innen über viele Seiten und lange Zeiträume hinweg nachzuverfolgen. Sie werden daher als tracking cookies bezeichnet. Da der Host, der das Cookie setzt (z.B. googleads.com, facebook.com, …) von dem Host abweicht, der die aktuell besuchte Seite ausgeliefert hat (shoes-for-cats.com), heißen diese Cookie aus technischer Sicht third party cookies.

Aufgabe 3: Cookies aus Datenschutzsicht

Lesen Sie diesen Artikel des Mozilla Developer Network und beantworten Sie damit folgende Fragen:

Caching

Liefert ein Server eine Ressource (z.B. eine HTML-Datei, eine Grafikdatei, …) aus, so kann der Client sie auf seiner SSD zwischenspeichern. Falls der User dieselbe Webseite erneut besucht und der Browser die Ressource erneut braucht, kann er dann einfach die zwischengespeicherte Version von der SSD verwenden. Diesen Vorgang nennt man caching. Das beschleunigt nicht nur den Ladevorgang der Webseite (das Laden von der SSD geht viel schneller als das Holen vom Server), sondern ist auch umweltschonend, da jeder HTTP-Request/Response Energie verbraucht.

Aber was, wenn der Client ein Bild "affe.jpg" in seinem Cache hat, das älter ist als die aktuelle Version auf dem Webserver?
Zu diesem Zweck kann der Webserver dem Client beim Ausliefern von Ressourcen im Response-Header signalisieren, wie lange er sie höchstens cachen darf. So bedeutet der Response-Header

Cache-Control: max-age=604800

dass die entsprechende Ressource maximal 604800 Sekunden im Cache zwischengespeichert werden sollte.

Weiterentwicklungen

HTTP/2

Die neue Protokollversion HTTP/2 findet Stand 2024 langsam immer mehr Verwendung in Browsern und Webservern. Sie bietet folgende Performanceverbesserungen gegenüber HTTP/1.1: