HTTP/2構成
| HTTP/2 の機能 | 説明 |
|---|---|
| ヘッダー圧縮 | HTTP ヘッダーには多くの繰り返し情報があるため、データ転送中に不要な帯域幅を消費します。HTTP/2 ヘッダーを圧縮し、要求と応答ごとにHTTPヘッダーを転送する要件を最小限に抑えることで、帯域幅の要件を削減します。 |
| 接続多重化 | レイテンシーは、ページの読み込み時間とエンドユーザーエクスペリエンスに大きな影響を与える可能性があります。接続の多重化は、単一の接続で複数の要求と応答を送信することにより、この問題を克服します。 |
| サーバープッシュ | サーバープッシュにより、サーバーはクライアントブラウザーにコンテンツをプロアクティブにプッシュできるため、ラウンドトリップの遅延を回避できます。この機能は、クライアントが必要と考える応答をキャッシュし、ラウンドトリップ回数を減らし、ページのレンダリング時間を改善します。重要:NetScaler ADCアプライアンスは、サーバープッシュ機能をサポートしていません。 |
| ヘッドオブラインブロッキングなし | HTTP 1.1 では、ブラウザは接続ごとに一度に 1 つのリソースをダウンロードできます。ブラウザが大きなリソースをダウンロードする必要がある場合、最初のダウンロードが完了するまで、他のすべてのリソースのダウンロードをブロックします。HTTP/2 は、多重化アプローチでこの問題を克服します。これにより、クライアントブラウザーは、同じ接続を介して他の Web コンポーネントを並行してダウンロードし、利用可能になったときにそれらを表示できます。 |
| リクエストの優先順位付け | ブラウザーが Web ページをレンダリングするとき、すべてのリソースが同等の優先度を持つわけではありません。ロード時間を短縮するために、最新のブラウザーはすべて、アセットのタイプ、ページ上の位置、および以前の訪問から学習した優先度によってリクエストを優先します。HTTP/1.1では、このプロトコルは多重化をサポートしておらず、サーバーによる要求の優先順位付けを通信する方法がないため、ブラウザは優先度データを使用する能力が制限される。その結果、不要なネットワーク遅延が生じます。HTTP/2 は、ブラウザがすべてのリクエストをディスパッチできるようにすることで、この問題を克服します。ブラウザーは、ストリームの依存関係と重みによってストリームの優先順位付けの優先度を伝えることができ、サーバーが応答配信を最適化できるようにします。重要:NetScaler ADCアプライアンスは、要求の優先順位付け機能をサポートしていません。 |
HTTP/2 のしくみ
HTTPS (SSL) 負荷分散構成の場合は HTTP/2
-
HTTP/2(HTTP プロファイルで有効になっている場合)
-
HTTP/1.1
HTTP 負荷分散設定用の HTTP/2
-
HTTP/2 アップグレード。クライアントは HTTP/1.1 リクエストをサーバーに送信します。リクエストにはアップグレードヘッダーが含まれており、HTTP/2 への接続をサーバーにアップグレードするように要求します。サーバーが HTTP/2 をサポートしている場合、サーバーはアップグレード要求を受け入れ、応答で通知します。クライアントとサーバは、クライアントがアップグレード確認応答を受信した後、HTTP/2 を使用して通信を開始します。
-
直接 HTTP/2。クライアントは、HTTP/2 アップグレード方式を使用する代わりに、HTTP/2 でサーバーとの通信を直接開始します。サーバーが HTTP/2 をサポートしていない場合、または HTTP/2 要求を直接受け付けるように構成されていない場合、クライアントからの HTTP/2 パケットはドロップされます。この方法は、クライアントデバイスの管理者が、サーバーが HTTP/2 をサポートしていることをすでに知っている場合に役立ちます。
-
**代替サービス (ALT-SVC) を使用して直接 HTTP/2。**サーバーは、HTTP/1.1 応答に代替サービス (ALT-SVC) フィールドを含めることで、HTTP/2 をサポートしていることをクライアントにアドバタイズします。クライアントが ALT-SVC フィールドを認識するように設定されている場合、クライアントとサーバは、クライアントが応答を受信した後、HTTP/2 を使用して直接通信を開始します。
はじめに
-
NetScaler ADCアプライアンスは、クライアント側とサーバー側でHTTP/2をサポートします。
-
NetScaler ADCアプライアンスは、HTTP/2サーバープッシュ機能をサポートしていません。
-
NetScaler ADCアプライアンスは、HTTP/2リクエストの優先順位付け機能をサポートしていません。
-
NetScaler ADCアプライアンスは、HTTPS負荷分散セットアップのHTTP/2 SSL再ネゴシエーションをサポートしていません。
-
NetScaler ADCアプライアンスはHTTP/2 NTLM認証をサポートしていません 。
-
HTTP/2 が有効で、接続多重化が無効で(USIP が有効の場合など)、クライアントとサーバの TCP 接続を 1 対 1 でマッピングすると、FIN、リセット(RST)などのクローズイベントがクライアントまたはサーバ接続からリンクされたピア接続に転送されます。
HTTP/2 を構成する
-
HTTP/2 を有効にし、HTTP プロファイルでオプションの HTTP/2 パラメータを設定します。HTTP プロファイルで HTTP/2 を有効にします。HTTPプロファイルでHTTP/2のみを有効にすると、NetScaler ADCアプライアンスはHTTP/2での通信にアップグレード方法(HTTPの場合)またはTLS ALPN方式(HTTPS)のみを使用します。NetScaler ADCアプライアンスで直接HTTP/2方式を使用するには、 HTTPプロファイルでダイレクトHTTP/2オプションを有効にする必要があります 。NetScaler ADCアプライアンスが代替サービス方法を使用して直接HTTP/2を使用するには、 HTTPプロファイルで代替サービス(altsvc) オプションを有効にする必要があります。
-
HTTPプロファイルを仮想サーバーまたはサービスにバインドします。HTTP プロファイルを仮想サーバーにバインドして、負荷分散セットアップのクライアント側の HTTP/2 を構成します。HTTP プロファイルをサービスにバインドして、負荷分散設定のサーバー側の HTTP2 を設定します。
-
HTTP/2 サーバー側のサポートのグローバルパラメータを有効にする。HTTP/2 サービス側 (http2ServerSide)グローバル HTTP パラメータを有効にして、HTTP/2 が構成されているすべての負荷分散セットアップのサーバー側で HTTP/2 サポートを有効にします。HTTP/2 サービス側が無効な場合、 関連する負荷分散サービスにバインドされた HTTP プロファイルで HTTP/2 が有効になっている場合でも、HTTP/2は負荷分散設定のサーバー側では機能しません 。
-
HTTP プロファイルの追加中に HTTP/2 を有効にして HTTP/2 パラメータを設定するには、コマンドプロンプトで次のように入力します。
add ns httpProfile <name> - http2 ( ENABLED | DISABLED ) [-http2Direct ( ENABLED | DISABLED )] [-altsvc ( ENABLED | DISABLED )] show ns httpProfile <name>
-
HTTP プロファイルの変更中に HTTP/2 を有効にして HTTP/2 パラメータを設定するには、コマンドプロンプトで次のように入力します。
set ns httpProfile <name> -http2 ( ENABLED | DISABLED ) [-http2Direct ( ENABLED | DISABLED)] [-altsvc (ENABLED | DISABLED )] show ns httpProfile <name>
set lb vserver <name> - httpProfileName <string> show lb vserver <name>
set service <name> -httpProfileName <string> show service <name>
set ns httpParam -HTTP2Serverside( ENABLED | DISABLED ) show ns httpParam
-
HTTP プロファイルを追加するとき、または既存の HTTP プロファイルを変更するときに、 HTTP/2 を有効にします。
設定例
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
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
HTTP/2 の初期接続ウィンドウサイズを構成する
-
ストリームに
SETTINGSフレームを使用する。 -
接続に
WINDOW_UPDATEフレームを使用する。
http2InitialWindowSizeパラメータを設定する必要があります。内部システムエラーのため、ADCアプライアンスは接続のフロー制御ウィンドウも初期化します。ストリームに設定されたフロー制御ウィンドウに変更がある場合、ADC アプライアンスは設定フレームを使用してピアと通信します。しかし、ADC アプライアンスは、WINDOW_UPDATEフレームを使用して接続のフロー制御ウィンドウの変更を伝達しません。これにより、接続がフリーズします。
http2InitialConnWindowSizeパラメータ(バイト単位)が追加されました。個別の設定可能なパラメータを使用することで、ストリームレベルと接続レベルの両方で、変更されたウィンドウサイズの更新をアプライアンスが送信できるようにできるようになりました。
CLI を使用して HTTP/2 初期接続ウィンドウサイズパラメータを設定します
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
HTTP/2 経由のウェブソケット設定
CLI を使用して HTTP/2 経由の WebSocket 接続を設定します
add httpprofile <http_profile_name> -http2 enabled -websocket enabled
add httpprofile <http_profile_name> -http2 enabled -http2direct enabled -websocket enabled
add httpprofile <http_profile_name> -http2 enabled
set httpparam -http2serverside ON
add httpprofile <http_profile_name> -http2 enabled -http2direct enabled
set httpparam -http2serverside ON
GUI を使用して HTTP/2 経由の WebSocket 接続を設定します
-
「プロファイル」 から必要なプロファイルを選択し 、「 編集」をクリックします。
-
「 HTTP プロファイルの設定」で、「 HTTP2 」または「 ダイレクト HTTP2 」チェックボックスを有効にします。
-
「WebSocket 接続を有効にする」チェックボックスを選択して、 WebSocket 接続を有効にします 。
-
「 HTTP プロファイルの作成」で、「 HTTP2 」または「 ダイレクト HTTP2 」チェックボックスを有効にします。
-
「 WebSocket 接続を有効にする 」チェックボックスを選択します。
| HTTP パケットバージョン | HTTP プロファイル内のウェブソケット | アクションをリクエストする | バックエンド HTTP/1.1 | バックエンド HTTP/2 |
|---|---|---|---|---|
| HTTP/1.1 | 無効 | 落下しました | - | - |
| HTTP/1.1 | 有効 | HTTP/1.1 | 各 HTTP/1.1 接続は、バックエンドの専用の HTTP/1.1 接続にマップされます | 各 HTTP/1.1 接続のバックエンドでの専用の HTTP/2 接続 |
| HTTP/2 | 有効 | HTTP/2 | フロントエンドの各ストリームは専用の HTTP/1.1 接続にマップされます | すべてのフロントエンドストリームは、バックエンドの 1 つの HTTP/2 接続または最大 3 つの HTTP/2 接続にマップできます。 |
| HTTP/2 | 無効 | 落下しました | - | - |
| HTTP パケットバージョン | HTTP プロファイル内のウェブソケット | アクションをリクエストする | バックエンド HTTP/1.1 | バックエンド HTTP/2 |
|---|---|---|---|---|
| HTTP/1.1 | 無効 | 落下しました | - | - |
| HTTP/1.1 | 有効 | HTTP/1.1 | 各 HTTP/1.1 接続は、バックエンドの専用の HTTP/1.1 接続にマップされます | 複数の HTTP/1.1 クライアントを 1 つの HTTP/2 接続または複数の HTTP/2 接続に多重化できます |
| HTTP/2 | 有効 | HTTP/2 | フロントエンドの各ストリームは専用の HTTP/1.1 接続にマップされます | すべてのフロントエンドストリームは、バックエンド上の単一の HTTP/2 接続または複数の HTTP/2 接続にマップできます |
| HTTP/2 | 無効 | 落下しました | - | - |