ADC

HTTP/2-Konfiguration

Hinweis: Die HTTP/2-Funktionalität wird von den NetScaler MPX-, VPX- und SDX-Modellen unterstützt. In einer NetScaler VPX-Appliance wird die HTTP/2-Funktionalität ab NetScaler Version 11.0 unterstützt.

Das Problem mit der Leistung von Webanwendungen hängt direkt mit dem Trend zur Erhöhung der Seitengröße und der Anzahl der Objekte auf den Webseiten zusammen. HTTP/1.1 wurde entwickelt, um kleinere Webseiten, langsamere Internetverbindungen und eingeschränktere Serverhardware als heute üblich zu unterstützen. Es ist nicht für neue Technologien wie JavaScript und Cascading Stylesheets (CSS) oder neue Medientypen wie Flash-Videos und grafikreiche Bilder geeignet. Dies liegt daran, dass nur eine Ressource pro Verbindung zum Server angefordert werden kann. Die Einschränkung erhöht die Anzahl der Roundtrips erheblich, was zu einem längeren Seitenrendern und einer verringerten Netzwerkleistung führt.

Das HTTP/2-Protokoll behebt diese Einschränkungen, indem es die Kommunikation mit weniger über das Netzwerk übertragenen Daten ermöglicht und die Möglichkeit bietet, mehrere Anfragen und Antworten über eine einzige Verbindung zu senden. Im Kern behebt HTTP/2 die wichtigsten Einschränkungen von HTTP/1.1, indem die zugrunde liegenden Netzwerkverbindungen effizienter genutzt werden. Es verändert die Art und Weise, wie Anfragen und Antworten über das Netzwerk übertragen werden.

HTTP/2 ist ein binäres Protokoll. Es ist effizienter zu analysieren, kompakter auf dem Kabel und vor allem weniger fehleranfällig im Vergleich zu Textprotokollen wie HTTP/1.1. Das HTTP/2-Protokoll verwendet eine binäre Framing-Schicht, die den Frame-Typ und die Art und Weise definiert, wie HTTP-Nachrichten eingekapselt und zwischen Client und Server übertragen werden. Die HTTP/2-Funktionalität unterstützt die Verwendung der CONNECT-Methode zum Herstellen einer Tunnelverbindung über einen einzelnen HTTP/2-Stream zu einem Remote-Host.

Das HTTP/2-Protokoll enthält viele leistungssteigernde Änderungen, die die Leistung erheblich verbessern, insbesondere für Clients, die sich über ein Mobilfunknetz verbinden.

In der folgenden Tabelle sind die wichtigsten Verbesserungen in HTTP/2 gegenüber HTTP/1.1 aufgeführt:

HTTP/2-Funktionen Beschreibung
Kopfzeilenkomprimierung HTTP-Header haben viele sich wiederholende Informationen und verbrauchen daher unnötige Bandbreite während der Datenübertragung. HTTP/2 reduziert die Bandbreitenanforderungen, indem der Header komprimiert und die Anforderung minimiert wird, HTTP-Header mit jeder Anforderung und Antwort zu transportieren.
Verbindungs-Multiplexing Die Latenz kann einen enormen Einfluss auf die Ladezeiten der Seite und die Benutzererfahrung haben. Das Verbindungsmultiplexing überwindet dieses Problem, indem mehrere Anfragen und Antworten über eine einzige Verbindung gesendet werden.
Server-Push Server-Push ermöglicht es dem Server, Inhalte proaktiv an den Client-Browser zu übertragen, wodurch Roundtrip-Verzögerungen vermieden werden. Diese Funktion speichert die Antworten, die der Kunde benötigt, im Cache, reduziert die Anzahl von Roundtrips und verbessert die Seitenrendering-Zeit. Wichtig: Die NetScaler-Appliance unterstützt die Server-Push-Funktionalität nicht.
Keine Kopf-of-Line-Blockierung Unter HTTP 1.1 können Browser pro Verbindung jeweils eine Ressource herunterladen. Wenn ein Browser eine große Ressource herunterladen muss, blockiert er alle anderen Ressourcen, bis der erste Download abgeschlossen ist. HTTP/2 überwindet dieses Problem mit einem Multiplexing-Ansatz. Es ermöglicht dem Client-Browser, andere Webkomponenten parallel über dieselbe Verbindung herunterzuladen und anzuzeigen, sobald sie verfügbar sind.
Priorisierung anfordern Nicht alle Ressourcen haben die gleiche Priorität, wenn der Browser eine Webseite rendert. Um die Ladezeit zu beschleunigen, priorisieren alle modernen Browser Anfragen nach Art des Assets, ihrem Standort auf der Seite und sogar nach erlernter Priorität aus früheren Besuchen. Mit HTTP/1.1 kann der Browser die Prioritätsdaten nur eingeschränkt verwenden, da dieses Protokoll kein Multiplexing unterstützt und es keine Möglichkeit gibt, die Anforderungspriorisierung durch den Server zu kommunizieren. Das Ergebnis ist eine unnötige Netzwerklatenz. HTTP/2 überwindet dieses Problem, indem es dem Browser erlaubt, alle Anfragen zu versenden. Der Browser kann seine Präferenz für die Stream-Priorisierung über Stream-Abhängigkeiten und Gewichte kommunizieren, wodurch die Server die Antwortbereitstellung optimieren können. Wichtig: Die NetScaler-Appliance unterstützt die Funktion zur Anforderungspriorisierung nicht.

So funktioniert HTTP/2

Eine NetScaler-Appliance unterstützt HTTP/2 sowohl clientseitig als auch serverseitig. Auf der Clientseite fungiert die NetScaler-Appliance als Server, der einen virtuellen HTTP/HTTPS-Server für HTTP/2 hostet. Auf der Back-End-Seite fungiert der NetScaler als Client für die Server, die an den virtuellen Server gebunden sind.

Daher unterhält die NetScaler-Appliance separate Verbindungen sowohl auf der Clientseite als auch auf der Serverseite. Die NetScaler-Appliance verfügt über separate HTTP/2-Konfigurationen für die Client- und Serverseite.

HTTP/2 für HTTPS (SSL) -Lastausgleichskonfiguration

Für eine HTTPS-Lastausgleichskonfiguration verwendet die NetScaler-Appliance die TLS ALPN-Erweiterung (RFC 7301), um festzustellen, ob der Client/Server HTTP/2 unterstützt. Wenn dies der Fall ist, wählt die Appliance HTTP/2 als Protokoll der Anwendungsschicht, um Daten (wie in RFC 7540 - Abschnitt 3.3 beschrieben) auf der Client-/Serverseite zu übertragen. Die Appliance verwendet bei der Auswahl des Anwendungsschicht-Protokolls über die TLS-ALPN-Erweiterung die folgende Präferenzreihenfolge:

  • HTTP/2 (falls im HTTP-Profil aktiviert)
  • HTTP/1.1

HTTP/2 für die Konfiguration des HTTP-Lastausgleichs

Für eine HTTP-Lastausgleichskonfiguration verwendet die NetScaler-Appliance eine der folgenden Methoden, um mit dem Client/Server über HTTP/2 zu kommunizieren.

Hinweis

In den folgenden Methodenbeschreibungen sind Client und Server allgemeine Begriffe für eine HTTP/2-Verbindung. Beispielsweise fungiert die NetScaler-Appliance für ein Lastausgleichs-Setup einer NetScaler-Appliance mit HTTP/2 als Server auf der Clientseite und fungiert als Client für die Serverseite.

  • HTTP/2-Upgrade. Ein Client sendet eine HTTP/1.1-Anfrage an einen Server. Die Anforderung enthält einen Upgrade-Header, der den Server auffordert, die Verbindung auf HTTP/2 zu aktualisieren. Wenn der Server HTTP/2 unterstützt, akzeptiert der Server die Upgrade-Anforderung und benachrichtigt ihn in seiner Antwort. Der Client und der Server beginnen mit der Kommunikation über HTTP/2, nachdem der Client die Upgrade-Bestätigungsantwort erhalten hat.

  • Direkt HTTP/2. Ein Client beginnt direkt mit einem Server in HTTP/2 zu kommunizieren, anstatt die HTTP/2-Upgrade-Methode zu verwenden. Wenn der Server HTTP/2 nicht unterstützt oder nicht für die direkte Annahme von HTTP/2-Anfragen konfiguriert ist, löscht er die HTTP/2-Pakete vom Client. Diese Methode ist hilfreich, wenn der Administrator des Clientgeräts bereits weiß, dass der Server HTTP/2 unterstützt.

  • Direkte HTTP/2 mithilfe des alternativen Dienstes (ALT-SVC). Ein Server kündigt an, dass er HTTP/2 für einen Client unterstützt, indem er ein Feld für den alternativen Dienst (ALT-SVC) in seine HTTP/1.1-Antwort einschließt. Wenn der Client so konfiguriert ist, dass er das Feld ALT-SVC versteht, beginnen der Client und der Server direkt über HTTP/2 zu kommunizieren, nachdem der Client die Antwort erhalten hat.

Die NetScaler-Appliance bietet konfigurierbare Optionen in einem HTTP-Profil für die HTTP/2-Methoden. Diese HTTP/2-Optionen können sowohl auf die Clientseite als auch auf die Serverseite eines HTTPS- oder HTTP-Lastausgleichs angewendet werden. Weitere Informationen zu HTTP/2-Methoden und Optionen finden Sie im PDF-Format HTTP/2-Optionen .

Bevor Sie beginnen

Beachten Sie die folgenden Punkte, bevor Sie mit der Konfiguration von HTTP/2 auf einer NetScaler-Appliance beginnen:

  • Die NetScaler-Appliance unterstützt HTTP/2 sowohl clientseitig als auch serverseitig.
  • Die NetScaler-Appliance unterstützt die HTTP/2-Server-Push-Funktionalität nicht.
  • Die NetScaler-Appliance unterstützt die HTTP/2-Anforderungspriorisierungsfunktion nicht.
  • Die NetScaler-Appliance unterstützt keine HTTP/2-SSL-Neuverhandlung für HTTPS-Lastausgleichseinrichtungen.
  • Die NetScaler-Appliance unterstützt keine HTTP/2-NTLM-Authentifizierung.
  • Wenn HTTP/2 aktiviert ist, Verbindungsmultiplexing deaktiviert (wie USIP aktiviert) und Eins-zu-Eins-Zuordnung von Client- und Server-TCP-Verbindungen werden Close-Ereignisse wie FIN, Reset (RST) von der Client- oder Serververbindung zur verknüpften Peer-Verbindung weitergeleitet.

Konfigurieren von HTTP/2

Die Konfiguration von HTTP/2 für ein Lastausgleichs-Setup (HTTPS oder HTTP) umfasst die folgenden Aufgaben:

  • Aktivieren Sie HTTP/2 und setzen Sie optionale HTTP/2-Parameter in einem HTTP-Profil. Aktivieren Sie HTTP/2 in einem HTTP-Profil. Wenn Sie nur HTTP/2 in einem HTTP-Profil aktivieren, verwendet die NetScaler-Appliance nur die Upgrade-Methode (für HTTP) oder die TLS-ALPN-Methode (für HTTPS) für die Kommunikation in HTTP/2.

    Damit die NetScaler-Appliance die direkte HTTP/2-Methode verwenden kann, muss die Option Direct HTTP/2 im HTTP-Profil aktiviert sein. Damit die NetScaler-Appliance das direkte HTTP/2 mit der alternativen Dienstmethode verwenden kann, muss die Option Alternativer Dienst (altsvc) im HTTP-Profil aktiviert sein.

  • Binden Sie das HTTP-Profil an einen virtuellen Server oder einen Dienst. Binden Sie das HTTP-Profil an einen virtuellen Server, um HTTP/2 für die Clientseite des Lastausgleichs-Setups zu konfigurieren. Binden Sie das HTTP-Profil an einen Dienst, um HTTP2 für die Serverseite des Lastausgleichs-Setups zu konfigurieren.

Hinweis

Citrix empfiehlt, separate HTTP-Profile für die Client- und Serverseite zu binden.

  • Aktivieren Sie den globalen Parameter für die serverseitige Unterstützung von HTTP/2. Aktivieren Sie den globalen HTTP-Parameter HTTP/2 Service Side(HTTP2Serverside), um die HTTP/2-Unterstützung auf der Serverseite aller Lastausgleichseinrichtungen zu aktivieren, die HTTP/2 konfiguriert haben.

    HTTP/2 funktioniert auf der Serverseite von Lastausgleichseinrichtungen nicht, wenn HTTP/2 Service Side deaktiviert ist, selbst wenn HTTP/2 im HTTP-Profil aktiviert ist, das an die zugehörigen Lastausgleichsdienste gebunden ist.

NetScaler-Befehlszeilenprozeduren:

So aktivieren Sie HTTP/2 und legen HTTP/2-Parameter über die NetScaler-Befehlszeile fest

  • Um HTTP/2 zu aktivieren und HTTP/2-Parameter beim Hinzufügen eines HTTP-Profils festzulegen, geben Sie an der Eingabeaufforderung Folgendes ein:

add ns httpProfile <name> - http2 ( ENABLED | DISABLED ) [-http2Direct ( ENABLED | DISABLED )] [-altsvc ( ENABLED | DISABLED )] show ns httpProfile <name>

  • Um HTTP/2 zu aktivieren und HTTP/2-Parameter festzulegen, während Sie ein HTTP-Profil ändern, geben Sie an der Eingabeaufforderung Folgendes ein:

set ns httpProfile <name> -http2 ( ENABLED | DISABLED ) [-http2Direct ( ENABLED | DISABLED)] [-altsvc (ENABLED | DISABLED )] show ns httpProfile <name>

So binden Sie das HTTP-Profil über die NetScaler-Befehlszeile an einen virtuellen Server

Geben Sie in der Befehlszeile Folgendes ein:

set lb vserver <name> - httpProfileName <string> show lb vserver <name>

So binden Sie das HTTP-Profil über die NetScaler-Befehlszeile an einen Lastausgleichsdienst

Geben Sie in der Befehlszeile Folgendes ein:

set service <name> -httpProfileName <string> show service <name>

So aktivieren Sie die HTTP/2-Unterstützung global auf der Serverseite über die NetScaler-Befehlszeile

Geben Sie in der Befehlszeile Folgendes ein:

set ns httpParam -HTTP2Serverside( ENABLED | DISABLED ) show ns httpParam

So aktivieren Sie HTTP/2 und legen Sie HTTP/2-Parameter über die NetScaler GUI fest

  1. Navigieren Sie zu System > Profileund klicken Sie auf die Registerkarte HTTP-Profile .
  2. Aktivieren Sie HTTP/2, während Sie ein HTTP-Profil hinzufügen oder ein vorhandenes HTTP-Profil ändern.

So binden Sie das HTTP-Profil über die NetScaler GUI an einen virtuellen Server

  1. Navigieren Sie zu Traffic Management > Load Balancing > Virtuelle Serverund öffnen Sie den virtuellen Server.
  2. Klicken Sie in den Erweiterten Einstellungenauf + HTTP-Profil, um das erstellte HTTP-Profil an den virtuellen Server zu binden.

So binden Sie das HTTP-Profil über die NetScaler GUI an einen Lastausgleichsdienst

  1. Navigieren Sie zu Traffic Management > Load Balancing > Service, und öffnen Sie den Dienst.
  2. Klicken Sie in den Erweiterten Einstellungenauf + HTTP-Profil, um das erstellte HTTP-Profil an den Dienst zu binden.

So aktivieren Sie die HTTP/2-Unterstützung global auf der Serverseite über die GUI

Navigieren Sie zu System > Einstellungen, klicken Sie auf HTTP-Parameter ändern und aktivieren Sie HTTP/2 Serverseite.

Beispielkonfigurationen

In der folgenden Beispielkonfiguration ist HTTP/2 und direktes HTTP/2 im HTTP-Profil HTTP-PROFILE-HTTP2-CLIENT-SIDE aktiviert. Das Profil ist an den virtuellen Server LB-VS-1 gebunden.

set ns httpProfile HTTP-PROFILE-HTTP2-CLIENT-SIDE -http2 enabled -http2Direct enabled
Done

set lb vserver LB-VS-1 -httpProfileName HTTP-PROFILE-HTTP2-CLIENT-SIDE

Done
<!--NeedCopy-->

In der folgenden Beispielkonfiguration ist HTTP/2 und alternativer Dienst (ALT-SVC) im HTTP-Profil HTTP-PROFILE-HTTP2-SERVER-SIDE aktiviert. Das Profil ist an Service LB-SERVICE-1 gebunden.

set ns httpparam -HTTP2Serverside ENABLED
Done

set ns httpProfile HTTP-PROFILE-HTTP2-SERVER-SIDE -http2 ENABLED -altsvc ENABLED
Done

set service LB-SERVICE-1 -httpProfileName HTTP-PROFILE-HTTP2-SERVER-SIDE
Done
<!--NeedCopy-->

Konfigurieren Sie die Fenstergröße der HTTP/2-Erstverbindung

Gemäß RFC 7540 muss das Flusssteuerungsfenster für den HTTP2-Stream und die Verbindung auf 64 K (65535) Oktette eingestellt sein, und jede Änderung an diesem Wert muss dem Peer mitgeteilt werden. Die ADC-Appliance kommuniziert die Änderung der Fenstergröße der Durchflusssteuerung wie folgt:

  • Verwenden des Frames SETTINGS für den Stream.
  • Verwenden des Frames WINDOW_UPDATE für die Verbindung.

In einem HTTP-Profil müssen Sie den Parameter http2InitialWindowSize so konfigurieren, dass die anfängliche Fenstergröße auf Streamebene festgelegt wird. Aufgrund eines internen Systemfehlers initialisiert die ADC-Appliance auch das Flusssteuerungsfenster für die Verbindung. Wenn sich das konfigurierte Flusssteuerungsfenster für den Stream ändert, kommuniziert die ADC-Appliance über den Frame SETTINGS mit dem Peer. Die ADC-Appliance kommuniziert jedoch die Änderung des Flusssteuerungsfensters für die Verbindung über den Frame WINDOW_UPDATE nicht. Dies führt zu einem Einfrieren der Verbindung.

Um das Problem zu beheben, wird nun der Parameter http2InitialConnWindowSize (in Byte) hinzugefügt, um das Flusssteuerungsfenster für die Verbindung zu steuern. Mithilfe separater konfigurierbarer Parameter können Sie der Appliance jetzt ermöglichen, Updates für die geänderte Fenstergröße sowohl auf Stream- als auch auf Verbindungsebene zu senden.

Konfigurieren Sie den Größenparameter für das erste Verbindungsfenster HTTP/2 mit der CLI

Geben Sie in der Befehlszeile Folgendes ein:

set http profile p1 -http2InitialConnWindowSize 8290
Initial window size for stream level flow control, in bytes.
Default value: 65535
Minimum value: 8192
Maximum value: 20971520
<!--NeedCopy-->

Hinweis: Wenn HTTP/2 aktiviert ist, empfiehlt Citrix, den Parameter TCP Dynamic Receive Buffering im TCP-Profil zu deaktivieren.

Konfiguration von WebSocket über HTTP/2

Die NetScaler-Appliance unterstützt WebSocket-Verbindungen über HTTP/2. Sie können die WebSocket-Verbindungen über die CLI- oder GUI-Schnittstelle aktivieren. Die WebSocket-HTTP/2-Verbindung kann gemultiplext werden.

WebSocket-Verbindungen über HTTP/2 in der CLI konfigurieren

Standardmäßig ist der Parameter WebSocket Connections deaktiviert. Sie können die WebSocket-Verbindungen über die CLI-Schnittstelle aktivieren.

Frontend-HTTP/2-WebSocket-Verbindungen aktivieren:

Geben Sie in der Befehlszeile Folgendes ein:

Für die SSL-Konfiguration:


add httpprofile <http_profile_name> -http2 enabled -websocket enabled

<!--NeedCopy-->

Für die Konfiguration im Klartext:


add httpprofile <http_profile_name> -http2 enabled -http2direct enabled -websocket enabled

<!--NeedCopy-->

Aktivieren Sie Backend-HTTP/2-WebSocket-Verbindungen:

Geben Sie in der Befehlszeile Folgendes ein:

Für die SSL-Konfiguration:

add httpprofile <http_profile_name> -http2 enabled
set httpparam -http2serverside ON
<!--NeedCopy-->

Für die Konfiguration im Klartext:

add httpprofile <http_profile_name> -http2 enabled -http2direct enabled
set httpparam -http2serverside ON
<!--NeedCopy-->

WebSocket-Verbindungen über HTTP/2 in der GUI konfigurieren

Sie können das folgende Verfahren verwenden, um die WebSocket-Verbindungen über die GUI-Schnittstelle zu aktivieren.

Bearbeiten Sie die vorhandenen Profile:

  1. Navigieren Sie zu System>Profile>HTTP-Profile.
  2. Wählen Sie das gewünschte Profil aus den Profilen aus und klicken Sie auf Bearbeiten.
  3. Aktivieren Sie im Feld HTTP-Profil konfigurieren die Kontrollkästchen HTTP2 oder DirectHTTP2.
  4. Aktivieren Sie die WebSocket-Verbindungen, indem Sie das Kontrollkästchen WebSocket-Verbindungen aktivieren aktivieren.

Neue Profile hinzufügen:

  1. Navigieren Sie zu System>Profile>HTTP-Profile.
  2. Sie können ein neues HTTP2-Profil hinzufügen, indem Sie auf Hinzufügenklicken.
  3. Aktivieren Sie im Feld HTTP-Profil erstellen die Kontrollkästchen HTTP2 oder DirectHTTP2.
  4. Aktivieren Sie das Kontrollkästchen WebSocket-Verbindungen aktivieren.

In der folgenden Tabelle wird das WebSocket-Verbindungsverhalten beschrieben, wenn das Backend-Multiplexing deaktiviert ist:

HTTP-Paketversion WebSocket im HTTP-Profil Aktion anfordern HTTP/1.1 Backend HTTP/2-Backend
HTTP/1.1 Deaktiviert fallen gelassen Nicht verfügbar Nicht verfügbar
HTTP/1.1 Aktiviert HTTP/1.1 Jede HTTP/1.1-Verbindung ist einer dedizierten HTTP/1.1-Verbindung im Backend zugeordnet Dedizierte HTTP/2-Verbindung im Backend für jede HTTP/1.1-Verbindung
HTTP/2 Aktiviert HTTP/2 Jeder Stream im Frontend ist einer dedizierten HTTP/1.1-Verbindung zugeordnet Alle Frontend-Streams können einer einzelnen HTTP/2-Verbindung oder maximal drei HTTP/2-Verbindungen im Backend zugeordnet werden.
HTTP/2 Deaktiviert fallen gelassen Nicht verfügbar Nicht verfügbar

In der folgenden Tabelle wird das WebSocket-Verbindungsverhalten beschrieben, wenn das Backend-Multiplexing aktiviert ist:

HTTP-Paketversion WebSocket im HTTP-Profil Aktion anfordern HTTP/1.1 Backend HTTP/2-Backend
HTTP/1.1 Deaktiviert fallen gelassen Nicht verfügbar Nicht verfügbar
HTTP/1.1 Aktiviert HTTP/1.1 Jede HTTP/1.1-Verbindung ist einer dedizierten HTTP/1.1-Verbindung im Backend zugeordnet Mehrere Http/1.1-Clients können zu einer einzelnen HTTP/2-Verbindung oder zu mehreren HTTP/2-Verbindungen gemultiplext werden
HTTP/2 Aktiviert HTTP/2 Jeder Stream im Frontend ist einer dedizierten HTTP/1.1-Verbindung zugeordnet Alle Frontend-Streams können einer einzelnen HTTP/2-Verbindung oder mehreren HTTP/2-Verbindungen im Backend zugeordnet werden
HTTP/2 Deaktiviert fallen gelassen Nicht verfügbar Nicht verfügbar