HTTP (HyperText Transfer Protocol) ist ein Netzwerkprotokoll auf Anwendungsebene, das festlegt, wie Inhalte über das Internet übertragen werden. HTTP/2 ist die neueste Version zum Zeitpunkt dieser Veröffentlichung.
Entwicklungsgeschichte von HTTP/2
Die erste Version des Protokolls, HTTP/0.9, wurde 1991 veröffentlicht. 1996 kam HTTP/1.0. Und der Vorgänger von HTTP/2 war HTTP/1.1, das 1999 veröffentlicht wurde. Danach gab es lange Zeit keine Aktualisierungen mehr.
Eine Alternative zu HTTP/1.1 wurde im Jahre 2009 entwickelt. Es war das SPDY-Protokoll. Die Entwickler erkannten, dass die bestehende Version keine ausreichende Datenübertragungsgeschwindigkeit bot. Ziel war es, die Art und Weise, wie die Software Anfragen empfängt und sendet, zu ändern und so das Internet zu beschleunigen. Aus diesem Protokoll ist HTTP/2 hervorgegangen.
SPDY beschleunigte die Webanwendungen tatsächlich, gewann an Popularität und wurde zu einem ernsthaften Konkurrenten von HTTP. Schließlich beschlossen die Entwickler, dass es nicht zwei konkurrierende Protokolle geben sollte, und kombinierten die beiden. Die Arbeitsgruppe HyperText Transfer Protocol des Internet Engineering Board übernahm die Aufgabe, das neue Protokoll zu erstellen. So wurde HTTP/2 im Jahre 2015 geboren.
Das Hauptziel der neuen Version war die Beschleunigung der Datenübertragung. Gleichzeitig wollten die Entwickler die Engpässe von HTTP/1.1 beseitigen, um es produktiver und sicherer zu machen.
Probleme und Einschränkungen von HTTP/1.1
Wie bereits erwähnt, wurde diese Version des Protokolls im Jahre 1999 veröffentlicht. HTTP/2 kam nur 16 Jahre später. In dieser Zeit hat sich im Internet viel verändert, die Websites haben neue Elemente: jР В°vascript, Animationen, CSS-Stile und vieles mehr.
Damit die Web-Ressourcen schnell genug geladen werden konnten, mussten die Anfragen für verschiedene Elemente gleichzeitig bearbeitet werden. Das Protokoll musste mehrere TCP-Verbindungen auf einmal aufbauen, um verschiedene Arten von Daten zu übertragen.
Dies führte zu einer enormen Belastung des Netzes.
Gleichzeitig war die Zahl der bestehenden Verbindungen begrenzt und oft unzureichend. Um diese Beschränkungen zu umgehen, haben Webentwickler viele verschiedene Tricks angewandt, z.B. Domain-Sharing (Verwendung von Subdomains zum Hochladen von Ressourcen), Zusammenführen von Bildern in eine einzige Datei usw. Dies führte zu zusätzlichen Komplikationen.
Da HTTP/1.1 bereits seit vielen Jahren im Einsatz war, erfüllte es irgendwann die Sicherheitsanforderungen nicht mehr. Angreifer fanden darin Schlupflöcher, die es ihnen ermöglichten, Benutzerdaten zu stehlen.
HTTP/2 hat all diese Probleme gelöst und zur Beschleunigung der Datenübertragung im Internet beigetragen.
Die Leistungsfähigkeit von HTTP/2: wie es Websites beschleunigt und die Datenübertragung verbessert
Um alle Probleme zu beheben, die HTTP/1.1 hatte, haben die Entwickler einige wichtige Änderungen vorgenommen. Wir werden nicht auf alle Unterschiede eingehen, sondern nur auf die, die sich direkt auf die Geschwindigkeit auswirken.
Binäres Protokoll
Frühere Versionen von HTTP übermittelten Daten im Textformat. Das war für die Nutzer praktisch. Aber technisch gesehen waren Textnachrichten langsamer zu verarbeiten als binäre Nachrichten.
Bei HTTP/2 bestehen die Nachrichten aus Frames, also binären Dateneinheiten. Ihre Gesamtheit wird als Strom bezeichnet. Jeder Frame trägt eine eindeutige Streamkennung — Informationen darüber, zu welchem Stream er gehört.
Es gibt verschiedene Arten von Frames. Für die Übertragung von Metadaten (Größe der Nachricht, Datentyp, Absender- und Empfängeradresse usw.) wird beispielsweise der HEADERS-Frame verwendet, für die Hauptnachricht der DATA-Frame.
Es gibt einen RST_STREAM-Frame — er wird zur Unterbrechung des Streams verwendet. Der Client sendet diesen an den Server, um ihm mitzuteilen, dass der Stream nicht mehr benötigt wird. Dadurch wird die Datenübertragung gestoppt, aber die Verbindung bleibt offen. Im Vergleich dazu: Bei HTTP/1.1 war die einzige Möglichkeit, die Datenübertragung zu stoppen, die Unterbrechung der Verbindung, die dann neu geöffnet werden musste.
Dieses Prinzip des Binärprotokolls verbessert die Qualität der Verbindung:
- Die Fehlerwahrscheinlichkeit ist geringer.
- Der Aufwand für das Parsen von Daten wird reduziert.
- Die Belastung des Netzes wird verringert und die Ressourcen werden effizienter genutzt.
- Binäre Befehle sind kompakter als Textbefehle, was die Verarbeitungs- und Ausführungszeit verkürzt.
- Dadurch werden Verzögerungen bei der Datenübertragung verringert.
- Eine einfachere Verarbeitung von Nachrichten bedeutet eine höhere Fehleranfälligkeit.
- Das Risiko von Hackerangriffen, insbesondere von Angriffen wie dem HTTP Response Splitting, wird verringert. In früheren Versionen waren solche Angriffe auf Textdaten in den Kopfzeilen möglich.
Darüber hinaus eröffnet die binäre Natur von HTTP/2 eine Reihe von Möglichkeiten zur Beschleunigung der Datenübertragung, auf die wir gleich noch eingehen werden.
Multiplexing
Dies ist einer der Hauptunterschiede zwischen HTTP/2 und früheren Versionen. Dadurch wurde es möglich, die Geschwindigkeit der Datenübertragung zu erhöhen.
In HTTP/1.1 wurden zur schnellen Übertragung verschiedener Datentypen mehrere parallele TCP-Verbindungen eingerichtet. In der neuen Version können alle Daten über eine einzige Verbindung übertragen werden.
Die binäre Natur des Protokolls erlaubt es, verschiedene Informationen parallel herunterzuladen, ohne dass es zu Verzögerungen oder Blockierungen bei den Antworten oder Anfragen kommt.
Da nur eine einzige Verbindung aufgebaut werden muss, wird die Zeit für die Bereitstellung der Inhalte erheblich verkürzt. Jede TCP-Verbindung erfordert nämlich einen „dreifachen Handschlag“:
- Der Absender sendet eine Anfrage zum Aufbau einer Verbindung — eine SYN-Nachricht und die Ordnungsnummer des übertragenen Bytes.
- Der Empfänger antwortet mit einer SYN-Nachricht, bestätigt den Empfang der Daten mit einer ACK-Nachricht und sendet die Nummer des als nächstes zu empfangenden Bytes.
- Der Absender bestätigt ebenfalls, dass er die Information erhalten hat und sendet die Nummer des nächsten zu empfangenden Bytes.
Erst nach diesen drei Schritten gilt die Verbindung als hergestellt.
All diese Schritte nehmen Zeit in Anspruch. Wenn eine Verbindung nur einmal aufgebaut werden muss, wird keine Zeit mit unnötigen „Handschlägen“ verschwendet und somit die Geschwindigkeit erhöht.
Darüber hinaus ist bei HTTP/2 keine Domänenaufteilung erforderlich.
Um das HTTP/1.1-TCP-Verbindungslimit zu umgehen, haben die Entwickler einige Inhalte in Subdomains verschoben. Die Daten aus den Subdomains wurden parallel heruntergeladen, was die Geschwindigkeit erhöhte.
Dies ist jetzt nicht mehr nötig, da verschiedene Daten über dieselbe Verbindung übertragen werden und es keine Einschränkungen gibt.
Komprimierung von Kopfzeilen
Damit ein Server eine Anfrage so genau wie möglich ausführen kann, muss ihre Kopfzeile so viele detaillierte Metadaten wie möglich enthalten. Und HTTP ist ein nicht zustandsorientiertes Protokoll. Das bedeutet, dass der Server keine Informationen aus früheren Anfragen speichern kann und dass der Client daher jedes Mal viele sich wiederholende Daten in den Kopfzeilen senden muss.
Die Kopfzeilen sind etwa 500–800 Byte groß, und manchmal mehr als ein Kilobyte, wenn Cookies verwendet werden.
Dadurch wird die gesamte Nachricht größer. Und je größer die Datenmenge ist, desto länger dauert die Übertragung und desto größer ist die Verzögerung.
HTTP/2 löst dieses Problem durch Komprimierung der Kopfzeilen mit dem HPACK-Format. Р С›Es kodiert und komprimiert Kopfzeilen mit dem Huffman-Algorithmus. Gleichzeitig unterhalten Client und Server eine gemeinsame, ständig aktualisierte Tabelle der Kopfzeilen. Dadurch können die Kopfzeilen anhand einer Tabelle rekonstruiert werden, anstatt sie wiederholt zu übermitteln.
Es werden weniger Daten übertragen, so dass Anfragen und Antworten schneller erfolgen.
Server-Push-Funktion
Diese Funktion ermöglicht es dem Server, Daten zu übermitteln, bevor der Client sie überhaupt angefordert hat. Zum Beispiel lädt der Browser eine Seite und sendet eine HTML-Anfrage. Neben dem HTML-Code benötigt die Seite aber auch CSS, um sie zu rendern. Der Server wartet nicht auf eine zweite CSS-Anforderung, sondern sendet die Daten zusammen mit dem angeforderten CSS.
Die vom Server „erratenen“ Daten werden mit dem Frame PUSH_PROMISE gesendet. Auf diese Weise kann der Kunde erkennen, dass es sich um Informationen handelt, die nicht angefordert wurden, und feststellen, ob sie benötigt werden. Wenn die Daten nicht benötigt werden (z.B. weil sie sich bereits im Cache befinden), kann der Browser mit einem RST_STREAM-Frame antworten (wie oben beschrieben) und die Redundanzübertragung beenden.
Auf diese Weise lassen sich doppelte Informationen vermeiden.
Auf diese Weise reduziert die Funktion die Anzahl der Anfragen an den Server, verringert die Belastung des Servers und beschleunigt die Webanwendungen.
Prioritätensetzung bei der Bereitstellung von Inhalten
Daten werden bei HTTP/2 standardmäßig asynchron in beliebiger Reihenfolge übertragen. Diese Reihenfolge kann jedoch festgelegt werden. Sie können festlegen, welche Daten der Server zuerst senden soll und welche später gesendet werden können.
Das Protokoll ermöglicht es Ihnen, die Gewichtung der einzelnen Streams zu bestimmen, d. h. ihre Bedeutung im Hinblick auf die Übertragungspriorität. Gleichzeitig ermöglicht es HTTP/2, die Abhängigkeit eines Streams von einem anderen festzulegen.
Die Gewichtung ist als ganze Zahl von 1 bis 256 definiert. Je höher die Zahl, desto höher ist die Priorität für einen Stream.
Die Abhängigkeit eines Streams von einem anderen wird durch eine spezielle Kennung angezeigt, die auf einen anderen, „übergeordneten“ Stream verweist.
Wenn zum Beispiel Stream X von Stream Y abhängt, bedeutet dies, dass Y der übergeordnete Stream ist und zuerst verarbeitet werden sollte, bevor Stream X verarbeitet wird.
Wenn Streams unabhängig sind, aber unterschiedliche Gewichtung haben, werden sie proportional zu ihren Gewichtungen mit unterschiedlichen Ressourcenmengen behandelt.
Angenommen, Stream X und Stream Y sind unabhängig voneinander, aber X hat den Wert 10, während Y den Wert 15 hat. Berechnen wir nun, wie viel Prozent der Ressourcen jeweils zugewiesen werden sollen:
- X + Y = 10 + 15 = 25
- Für X zugewiesene Ressourcen = 10 / 25 = 40%
- Für Y zugewiesene Ressourcen = 15 / 25 = 60%
So werden dem Verarbeitungsablauf X 40% der Ressourcen zugewiesen, während dem Verarbeitungsablauf Y 60% zugewiesen werden.
Schauen wir uns die Funktionsweise anhand eines genaueren Beispiels an.
Was diese Regelung bedeutet:
- Stream D sollte zuerst verarbeitet werden.
- Die Streams E und C sollten nach D verarbeitet werden. Jedem dieser Bereiche sollten 50% der Ressourcen zugewiesen werden.
- Die Streams A und B werden nach C bearbeitet. A erhält 75% der ressourcen, B 25%.
Welche Möglichkeiten bietet die Prioritätensetzung?
- Sie können festlegen, welche Inhalte zuerst geladen werden sollen.
- Die erste Priorität kann den für die Nutzer wichtigsten Elementen der Website eingeräumt werden.
- Ihre Nutzer haben alle Elemente, die sie für die Interaktion mit Ihrer Website benötigen, bevor diese vollständig geladen ist.
- Dies vermittelt den Eindruck eines schnelleren Ladens und verbessert das Kundenerlebnis.
Wie HTTP/2 Websites in der Praxis schneller macht
Es ist schon eine Weile her, dass HTTP/2 veröffentlicht wurde, und es wurde viele Male getestet und mit HTTP/1.1 verglichen. Verschiedene Tests zeigen unterschiedliche Ergebnisse, aber die meisten bestätigen, dass diese neue Version ihren Vorgänger in der Leistung übertrifft.
Der CCS-Tricks-Test hat zum Beispiel gezeigt, dass eine Website mit HTTP/2 fast doppelt so schnell geladen wird wie eine Ressource mit HTTP/1.1.
Für die Tests simulierte das Unternehmen eine echte einseitige Website auf WordPress. Sie verwendeten das Tool GTMetrix, um die Ladegeschwindigkeit zu messen.
Das Ergebnis war, dass die Seite mit HTTP/1.1 in 1,9 Sekunden geladen wurde.
Und bei HTTP/2 mit denselben Bedingungen betrug die Ladezeit 1 Sekunde.
Wie Sie sehen können, ist gleichzeitig die Anzahl der Anfragen mit HTTP/2 zurückgegangen.
Die Tests von SolarWinds zeigen weniger beeindruckende Ergebnisse. Ihre Tests zeigen, dass die Leistung von HTTP/2 nur 13% besser ist als die seines Vorgängers.
Ähnlich wie bei der vorherigen Studie hat das Unternehmen die Geschwindigkeit einer WordPress-Website gemessen. Für die Messungen wurde Pingdom verwendet. Die Geschwindigkeit wurde 4 Mal alle 30 Minuten überprüft. Aus den Ergebnissen errechneten sie einen Durchschnittswert. Und das ist es, was sie bekommen haben.
Eine Website mit HTTP/1.1 brauchte 534 ms zum Laden.
Dieselbe Website benötigte bei HTTP/2 464 ms zum Laden.
Wie auch immer, HTTP/2 ist derzeit die am meisten optimierte und schnellste Version des wichtigsten Datenübertragungsprotokolls im Internet.
Ziehen wir Bilanz
- HTTP/2 ist die zweite Hauptversion von HTTP, dem Netzwerkprotokoll der Anwendungsschicht, das definiert, wie Inhalte über das Internet übertragen werden.
- HTTP/2 wurde 2015 veröffentlicht und ersetzt HTTP/1.1. Der Hauptzweck der neuen Version war die Beschleunigung der Übertragung von Inhalten.
- Die wichtigste Funktion von HTTP/2, die eine Erhöhung der Übertragungsgeschwindigkeit ermöglichte, war das Stream-Multiplexing. Es ermöglicht Ihnen, eine Verbindung für jede Art von Daten zu erstellen und Informationen parallel zu senden.
- Darüber hinaus werden mit HTTP/2 Inhalte aufgrund von Kopfzeilen-Komprimierung, Stream-Priorisierung und Server-Push schneller übertragen. Außerdem ist es im Gegensatz zu HTTP/1.1 ein binäres Protokoll, was es schneller macht.
- Tests haben gezeigt, dass die Verwendung von HTTP/2 im Vergleich zu HTTP/1.1 einen deutlichen Geschwindigkeitsvorteil beim Herunterladen von Websites bringt.
Das CDN von Gcore unterstützt das HTTP/2-Protokoll. Unser Netzwerk kann Inhalte über HTTP/2 liefern, auch wenn Ihre Server dies nicht unterstützen.
CDN-Merkmale der Gcore:
- Schnell. Die durchschnittliche Reaktionszeit beträgt weltweit weniger als 30 ms.
- Leistungsstark. Gesamtnetzkapazität — mehr als 75 Tbit/s.
- Global. Mehr als 90 Präsenzpunkte auf 5 Kontinenten.
- Kostengünstig. Günstige Tarife und Pauschalpreise weltweit. Es gibt einen kostenlosen Tarif für kleine Projekte.