Tech: Wie HTTP/2 die User-Experience verbessert

von Kevin Pfaff

Wann haben sie das letzte Mal eine Software installiert?


Möglicherweise ist das schon länger her, denn immer mehr Anwendungen sind Browser-basiert und über das WWW erreichbar. Die Vorteile liegen auf der Hand: es müssen keine umfangreichen Programme installiert werden, man ist nicht an ein bestimmtes Gerät gebunden und verfügt somit über maximale Flexibilität bei der Nutzung solcher Anwendungen.

Das Zauberwort dabei lautet „Speed“, denn vorausgesetzt es sind entsprechende Bandbreiten und Übertragungsgeschwindigkeiten verfügbar, müssen die Anwendungen schlichtweg so schnell arbeiten, dass der Nutzer keinen Unterschied zu vergleichbaren Programmen spürt.

Da ist es beinahe schon befremdlich, dass die Kerntechnologie hinter vielen Websites noch auf einer Technologie basiert, die bereits 20 Jahre auf dem Buckel hat. Das Hypertext Transfer Protocol, kurz HTTP, wurde tatsächlich 1999 in der Version 1.1 veröffentlicht – und blieb mehr als 15 Jahre lang beinahe unverändert.

Der Grund: man hatte Angst, eine Änderung könnte verheerende Auswirkungen auf Millionen bestehender Contents haben.

Währenddessen hat sich das Internet in riesigen Schritten weiterentwickelt und sich immer mehr den Bedürfnissen der steigenden Anzahl von Nutzern angepasst.

  • Webseiten werden zunehmend umfangreicher und deutlich medienintensiver.
  • Mobile Devices wie Tablets und Smartphones vertreiben sukzessive den klassischen Desktop-PC als primäres Endgerät (Webseitenaufrufe 2015: ~35%, 2018 schon: ~52%).
  • Geschwindigkeit und Reaktionszeit einer Webseite entscheiden heute maßgeblich über die Nutzungsakzeptanz von Anwendern (Die Absprungrate steigt um 90%, wenn die Seite zwischen 1 und 5 Sekunden zum Laden benötigt).

Es ist eine logische Folge, dass sich ein Industriezweig entwickelt hat, der es sich zur Aufgabe gemacht hat, die Schwächen von HTTP 1.1 über teils komplexe Mechanismen und Technologien zu umgehen.

2012 wurde z.B. SPDY (abgeleitet von Speedy = schnell/flott) von Google vorgestellt. Es ging einige der Probleme von HTTP 1.1 an. Diese „Protokoll-Erweiterung“ verbreitete sich so unglaublich schnell, dass die Internet Engineering Task Force (IETF) schließlich ein Einsehen hatte. Die Zeit war reif, die Entwicklung einer neuen Version des historischen HTTP-Protokolls anzupacken.

2015 war es soweit: HTTP/2 – entwickelt auf Basis von SPDY/2 – wurde veröffentlicht und das Protokoll somit endlich wieder auf einen aktuellen Stand gehievt. Aktuelle Schwächen der alten Version wurden ausgebessert sowie neue Funktionen und ein Sicherheitsupgrade implementiert.

Was wurde also verbessert und was ist neu?

Streams
In Version 1.x wurden noch alle Anfragen pro Verbindung sequenziell abgearbeitet. Das führte dazu, dass eine besonders lange abzuarbeitende Anfrage, alle anderen nachfolgenden Anfragen blockierte.

In der neuen Version wird nur noch eine Verbindung pro Domäne hergestellt, was dazu führt, dass die Zeit, welche benötigt wird, um eine Verbindung herzustellen, stark verringert wird.

Diese Streams sind nun „multiplexed“, was so viel bedeutet wie, dass das Versenden von mehreren Frames in einem Stream möglich ist, ohne dass diese sich gegenseitig blockieren. Dies passiert durch den Stream Identifier, welchen jeder Frame in seinem Header mitüberträgt und diesen einem Stream zuordnet.

Des Weiteren können den einzelnen Anfragen Gewichtungen gegeben werden, damit der Server weiß, welche Daten er zuerst liefern soll. Dies kann die Aufbauzeit einer Webseite stark erhöhen, da nun die zur grundsätzlichen Darstellung der Seite benötigten Elemente vor weniger wichtigen übertragen werden.

Binary Format
Alle Daten werden nun binär, im Gegensatz zum textbasierten Format in Version 1.x, übertragen. Dies führt dazu, dass die Daten serverseitig nicht geparst werden müssen und weniger Daten an sich übertragen werden, was einen positiven Effekt auf Übertragungsrate und Verarbeitungsgeschwindigkeit mit sich bringt.

Flow Control (Streams)
Über diese Funktion ist es möglich, dem Client oder respektive dem Server mitzuteilen, wie viele Bytes dieser maximal entgegennehmen möchte. Dadurch hat der Empfänger Zeit, die eingehenden Daten zu verarbeiten und ein spezieller Stream blockt nicht andere Streams im Netzwerk aus. Erst nach einem Hinweis an den Sender, wie viele Bytes verarbeitet wurden, werden diese dem Sendepool wieder gutgeschrieben.

Server Push
Dieses Feature steigert die Performanz durch den Ansatz: „Wenn es der Client schon im Cache hat, muss er es nicht erst anfragen“. Wenn der Server der Meinung ist, dass Daten in naher Zukunft vom Client benötigt werden, so kann er diese proaktiv an diesen übertragen. Dies passiert am besten, wenn der Server gerade mit der Verarbeitung eines aktuellen Requests beschäftigt ist und dadurch die Leitung frei ist.
Header Compression (HPACK)

Hierbei handelt es sich um das Komprimieren des Anfrage-Headers unter der Verwendung eines Huffman-Algorithmus. In Version 1.x wurde dieser immer in menschlich lesbaren Text übertragen, während der Inhalt komprimiert wurde. Dies führt dazu, dass ein bereits bekannter Header durch einen einfachen Index ersetzt wird, wodurch eine Komprimierungsrate von bis zu 85% erreicht werden kann.

HTTP/2 bietet einige Verbesserungen für schnellen und dynamischen Webcontent. Entwickler müssen beachten, dass diese teils simpler Natur und standardmäßig aktiviert sind (z.B. Binary Format, Header Compression), andere dagegen sind recht komplex und nur dann von Vorteil, wenn diese richtig konfiguriert und implementiert werden (Flow Control, Server Push).

Die Weiterentwicklung war in jedem Fall ein notwendiger Schritt, um Content fit zu machen, für die stetig wachsenden Anforderungen an die Internetnutzung. Auch wenn erstmal nur die Verbesserungen und standardmäßig aktivierten neuen Features genutzt werden, verhelfen diese bereits zu einem Geschwindigkeitsvorteil.

Quellen:
https://www.statista.com/statistics/241462/global-mobile-phone-website-traffic-share/
https://www.thinkwithgoogle.com/marketing-resources/data-measurement/mobile-page-speed-new-industry-benchmarks

zurück