it-swarm.com.de

Was bedeutet Multiplexing in HTTP/2?

Könnte jemand bitte das Multiplexing in Bezug auf HTTP/2 erklären und wie es funktioniert?

45
user3448600

Vereinfacht gesagt, ermöglicht das Multiplexen, dass Ihr Browser mehrere Anforderungen gleichzeitig an derselben Verbindung auslöst und die Anforderungen in beliebiger Reihenfolge zurücksendet.

Und nun zu der viel komplizierteren Antwort ...

Wenn Sie eine Webseite laden, lädt sie die HTML-Seite herunter. Sie benötigt CSS, etwas JavaScript, eine Vielzahl von Bildern usw.

Unter HTTP/1.1 können Sie jeweils nur eine dieser Verbindungen über Ihre HTTP/1.1-Verbindung herunterladen. Ihr Browser lädt also den HTML-Code herunter und fragt nach der CSS-Datei. Wenn dies zurückgegeben wird, werden Sie nach der JavaScript-Datei gefragt. Wenn dies zurückgegeben wird, werden Sie nach der ersten Image-Datei gefragt ... usw. HTTP/1.1 ist im Wesentlichen synchron. Wenn Sie eine Anfrage senden, bleiben Sie stehen, bis Sie eine Antwort erhalten. Dies bedeutet, dass der Browser meistens nicht sehr viel tut, da er eine Anfrage ausgelöst hat, auf eine Antwort wartet, dann eine andere Anfrage abschickt und dann auf eine Antwort wartet ... usw. Natürlich komplexe Websites mit Für viele JavaScript-Operationen muss der Browser viele Verarbeitungsschritte ausführen. Dies hängt jedoch davon ab, ob JavaScript heruntergeladen wird. Daher verursachen Verzögerungen, die an HTTP/1.1 erben, Probleme. Normalerweise macht der Server auch nicht viel (zumindest pro Anfrage - natürlich summieren sich diese für belastete Websites), da er auf statische Ressourcen (wie CSS, JavaScript, Bilder, Schriftarten usw.) fast sofort reagieren sollte. und hoffentlich auch bei dynamischen Anfragen (die einen Datenbankaufruf oder ähnliches erfordern) nicht zu lange.

Ein Hauptproblem im Web ist daher die Netzwerklatenz beim Senden der Anforderungen zwischen Browser und Server. Es kann nur Dutzende oder vielleicht Hunderte von Millisekunden sein, was vielleicht nicht viel erscheint, aber sie summieren sich und sind oft die langsamsten Schritte im Internet - vor allem, da Websites komplexer werden und zusätzliche Ressourcen (wie sie bekommen werden) und Internetzugang benötigen wird zunehmend mobil (mit langsamer Latenz als Breitband).

Nehmen wir als Beispiel an, es gibt 10 Ressourcen, die Ihre Webseite laden muss, nachdem der HTML-Code selbst geladen wurde (was nach heutigen Standards eine sehr kleine Site ist, da 100+ Ressourcen üblich sind, aber wir werden es einfach halten und gehen davon aus Beispiel). Nehmen wir einmal an, dass jede Anfrage 100 ms benötigt, um über das Internet zum Webserver und zurück zu gelangen, und die Verarbeitungszeit an beiden Enden ist vernachlässigbar (sagen wir zur Vereinfachung 0). Da Sie jede Ressource einsenden und jeweils eine Antwort abwarten müssen, dauert es 10 * 100ms = 1.000ms oder 1 Sekunde, um die gesamte Site herunterzuladen.

Um dies zu umgehen, öffnen Browser normalerweise mehrere Verbindungen zum Webserver (normalerweise 6). Dies bedeutet, dass ein Browser mehrere Anforderungen gleichzeitig auslösen kann, was viel besser ist, jedoch auf Kosten der Notwendigkeit, mehrere Verbindungen einrichten und verwalten zu müssen (was sowohl Browser als auch Server betrifft). Fahren wir mit dem vorherigen Beispiel fort und sagen auch, dass es 4 Verbindungen gibt, und zur Vereinfachung sagen wir, dass alle Anforderungen gleich sind. In diesem Fall können Sie die Anforderungen auf alle vier Verbindungen aufteilen, sodass zwei über drei Ressourcen verfügen und zwei über zwei Ressourcen, um die zehn Ressourcen vollständig zu erhalten (3 + 3 + 2 + 2 = 10). In diesem Fall ist der schlechteste Fall 3 Rundenzeiten oder 300 ms = 0,3 Sekunden. Dies ist eine gute Verbesserung. Dieses einfache Beispiel beinhaltet jedoch nicht die Kosten für die Einrichtung dieser mehreren Verbindungen oder die Auswirkungen auf die Ressourcen, die sich aus der Verwaltung dieser Verbindungen ergeben (was ich nicht getan habe.) Hier ist diese Antwort schon lange genug, aber das Einrichten separater TCP - Verbindungen erfordert Zeit und andere Ressourcen - um die TCP - Verbindung herzustellen, HTTPS-Handshake und dann wegen TCP langsamer Start).Mit HTTP/2 können Sie mehrere Anforderungen über die Verbindung same senden. Sie müssen also nicht wie oben beschrieben mehrere Verbindungen öffnen. Ihr Browser kann also "Gimme diese CSS-Datei. Gimme diese JavaScript-Datei. Gimme image1.jpg. Gimme image2.jpg ... Etc." die eine einzige Verbindung voll ausnutzen. Dies hat den offensichtlichen Leistungsvorteil, dass das Senden dieser Anforderungen, die auf eine freie Verbindung warten, nicht verzögert wird. Alle diese Anfragen gelangen (fast) parallel durch das Internet zum Server. Der Server antwortet auf jeden, und dann machen sie sich auf den Weg zurück. Tatsächlich ist es sogar noch leistungsfähiger als dies, da der Webserver auf sie in jeder beliebigen Reihenfolge reagieren kann und Dateien in unterschiedlicher Reihenfolge zurücksendet oder sogar jede angeforderte Datei in Stücke zerlegt und die Dateien miteinander vermischt. Dies hat den sekundären Vorteil, dass eine umfangreiche Anforderung nicht alle anderen nachfolgenden Anforderungen blockiert (bekannt als Zeilenleitungsblockierung Problem). Der Webbrowser muss dann alle Teile wieder zusammensetzen. Im besten Fall (vorausgesetzt, es gibt keine Bandbreitenbegrenzung - siehe unten), wenn alle 10 Anforderungen auf einmal parallel abgesetzt werden und sofort vom Server beantwortet werden, bedeutet dies, dass Sie im Grunde nur einen Umlauf oder 100 ms oder 0,1 Sekunden Zeit haben Laden Sie alle 10 Ressourcen herunter. Und das hat keine der Nachteile, die mehrere Verbindungen für HTTP/1.1 hatten! Dies ist auch viel skalierbarer, wenn die Ressourcen auf jeder Website wachsen (derzeit öffnen Browser unter HTTP/1.1 bis zu 6 parallele Verbindungen. Sollte dies jedoch mit zunehmendem Komplexitätsgrad der Websites wachsen?).

Dieses Diagramm zeigt die Unterschiede, und es gibt auch eine animierte Version .

Hinweis: HTTP/1.1 hat das Konzept von pipelining , wodurch auch mehrere Anfragen gleichzeitig gesendet werden können. Sie mussten jedoch noch in der Reihenfolge zurückgegeben werden, in der sie in ihrer Gesamtheit angefordert wurden, also bei weitem nicht so gut wie HTTP/2, auch wenn sie konzeptionell ähnlich sind. Ganz zu schweigen von der Tatsache, dass dies von Browsern und Servern so wenig unterstützt wird, dass sie selten verwendet wird.

In den folgenden Kommentaren wird hervorgehoben, wie sich die Bandbreite hier auf uns auswirkt. Natürlich ist Ihre Internetverbindung durch den Download begrenzt, und HTTP/2 spricht das nicht an. Wenn diese 10 Ressourcen, die in den oben genannten Beispielen beschrieben wurden, ausgesprochen große Bilder in Druckqualität darstellen, werden sie dennoch nur langsam heruntergeladen. Für die meisten Webbrowser ist Bandbreite jedoch weniger ein Problem als Latenz. Wenn es sich bei diesen zehn Ressourcen um kleine Elemente handelt (insbesondere um Textressourcen wie CSS und JavaScript, die in winzige Formaten umgewandelt werden können), wie dies auf Websites üblich ist, ist die Bandbreite nicht wirklich ein Problem - es ist das schiere Volumen der Ressourcen, das oft das ist Problem und HTTP/2 scheint das zu beheben. Dies ist auch der Grund, warum die Verkettung in HTTP/1.1 als eine andere Problemumgehung verwendet wird. So wird beispielsweise häufig CSS zu einer einzigen Datei zusammengefügt: Die Anzahl der heruntergeladenen CSS-Dateien ist dieselbe, aber wenn sie als eine Ressource verwendet wird, ergeben sich enorme Leistungsvorteile weniger bei HTTP/2 und in der Tat sagen einige, Verkettung sollte ein Anti-Pattern unter HTTP/2 sein - obwohl es Argumente gibt, die dagegen sprechen, auch ganz abzuschaffen.

Um es als reales Beispiel zu bezeichnen: Nehmen Sie an, Sie müssen 10 Artikel in einem Geschäft für die Zustellung nach Hause bestellen:.

  • .

  • .

  • .

  • Hoffentlich hilft das.

Of course you're still limited by your the size of your postman's van (the bandwidth) so they might have to leave some packages back at the sorting office until the next day if they are full up for that day, but that's rarely a problem compared to the delay in actually sending the order across and back. Most of web browsing involves sending small letters back and forth, rather than bulky packages.

Hope that helps.

94
Barry Pollard

Simple Ans ( Source ):

Multiplexing bedeutet, dass Ihr Browser mehrere Anfragen senden und mehrere Antworten "gebündelt" in einer einzigen TCP Verbindung empfangen kann. Die mit DNS-Lookups und Handshakes verbundene Arbeitslast wird also für Dateien gespeichert, die vom selben Server stammen.

Komplexe/ausführliche Angaben:

Schauen Sie sich die Antwort von @BazzaDP an.

2
Revanth Kumar

Multiplexing in HTTP 2.0 ist die Art der Beziehung zwischen dem Browser und dem Server, die eine einzige Verbindung verwenden, um mehrere Anforderungen und Antworten parallel zu liefern, wodurch in diesem Prozess viele einzelne Frames erstellt werden.

Das Multiplexing löst sich von der strengen Request-Response-Semantik ab und ermöglicht One-to-Many- oder Many-to-Many-Beziehungen.

 HTTP1 VS HTTP2 interchange process

0
Juanma Menendez