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.
Connection: Keep-Alive
und signalisiert so dem Server, dass er die TCP-Verbindung aus Performancegründen offenhalten möchte.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.
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:
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.
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:
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:
Versuchen Sie durch Recherche/Überlegung folgende Fragen zu beantworten:
Ö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
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.
Lesen Sie diesen Artikel des Mozilla Developer Network und beantworten Sie damit folgende Fragen:
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.
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: