2016-09-28 2 views
9

Für eine lange Zeit haben Browser maximal 6 gleichzeitige HTTP 1.1-Verbindungen pro Host verwendet, um Assets von der Webseite abzurufen. Wenn Sie (weit) über diesen goldenen Standard hinausgehen, wird dies als DOS wahrgenommen und Sie werden von einem Server verbannt.Wie viele gleichzeitige Anfragen sollten wir multiplexen in HTTP/2

Jetzt gibt es HTTP/2 und wir können viele HTTP-Anfragen auf einer einzigen Verbindung multiplexen. Sollten wir immer noch ähnliche Beschränkungen für die Anzahl der gleichzeitigen Anfragen verwenden, die wir auf einer Verbindung multiplexen, um zu verhindern, dass Server überlastet werden? Oder schadet es nicht, viel mehr Anfragen in einer einzigen Verbindung zu multiplexen?

Wer weiß, welche Einschränkungen Browser pro Host und pro Verbindung für HTTP/2-Server verwenden?

Antwort

11

Die Anzahl der Streams, dass Client und Server initiieren nicht unbegrenzt ist, wird es durch die SETTINGS_MAX_CONCURRENT_STREAMS Parameter des SETTINGS Rahmen beauftragt ist, dass jeder Peer am Anfang der Verbindung sendet: siehe section 6.5.2 of RFC 7540 Der Standard unbegrenzt ist, und die RFC hat folgende Empfehlung:

Es wird empfohlen, dass dieser Wert nicht kleiner als 100 ist, damit die Parallelität nicht unnötig einschränkt.

Die Anzahl der Streams ist jedoch nicht der einzige Parameter, der bei der Berücksichtigung der Parallelität in HTTP/2 berücksichtigt werden muss. Gewichte und Stream-Abhängigkeiten kommen ebenfalls ins Spiel.

Jeder Stream erhält eine Gewichtung und der RFC empfiehlt, dass der Server Ressourcen basierend auf ihrem Gewicht Ressourcen zuweist. Clientseitig weist Firefox dem CSS höhere Gewichtung zu als Bildern. See this great presentation for more details about how each browser prioritizes and organizes its streams. Chrome verwendet Abhängigkeiten, sodass die wichtigsten Elemente (CSS, HTML) in der Abhängigkeitskette höher sind als andere. See this tool zeigt die Abhängigkeitsstruktur, die Chrome generiert. Die Serverseite H2O, a new and fast HTTP server implementiert einen O (1) Scheduler pro Verbindung, um die Streams basierend auf Abhängigkeiten und Gewichtungen an den Client zu senden. Das heißt, wenn Sie 500 Elemente mit Standardabhängigkeit anfordern, erhält jeder Stream 1/500 der Serverressourcen.

Es sollte keinen Nachteil geben, so viele Elemente wie möglich anzufordern (für regelmäßiges Surfen im Internet). Laut HTTPArchive enthalten 40% der Seiten mehr als 100 Elemente, und ich denke, es ist vernünftig, sie alle gleichzeitig zu fragen (vorausgesetzt, die Anzahl der Streams bleibt unter SETTINGS_MAX_CONCURRENT_STREAMS. Ich glaube, dass es wichtig ist, Anfragen zu stellen) sie in der Reihenfolge, in der der Browser sie so weit wie möglich rendern kann,

Verwandte Themen