このセクションでは、NSX Advanced Load Balancer での HTTP/2 サポートについて説明します。HTTP/2(旧称:HTTP/2.0)は HTTP の最新バージョンで、HTTP 1.1 をベースに開発されました。HTTP/2 はバイナリ プロトコルですが、HTTP 1.1 はテキスト プロトコルです。
HTTP/1.1 と比べた HTTP/2 のメリットは次のとおりです。
要求と応答の多重化:HTTP/1.1 では、複数の並列要求に対して複数の TCP 接続が開かれます。HTTP/2 では、複数の要求をインターリーブ可能なフレームに分割できます。リモート エンドは、それらを再構築できます。引き続き複数の接続を開くことができますが、接続数は HTTP/1.1 ほど多くありません。
サーバ プッシュ:サーバは、クライアントが各リソースに対する要求を明示的に送信しなくても、1 つのクライアント要求に応答して複数のリソースを送信できます。これにより、各要求がリソースを提供するのを待機することによって発生する遅延が短縮されます。HTTP/1.1 では、アプリケーションは、リソースをインライン化することでこの問題を回避しようとします。HTTP/2 を使用すると、クライアントはリソースをキャッシュし、ページ間で再利用し、他のリソースとともに多重化を使用することができます。
フロー制御:HTTP/2 は、ウィンドウ サイズを使用してどちらかのエンドが反対側を過負荷状態にしないようにすることで、アプリケーション レイヤー レベルでフロー制御を実現します。
ヘッダー圧縮:HTTP/1.1 では、要求内の各ヘッダーがテキストとして送信されます。HTTP/2 では、ヘッダーは HPACK 圧縮形式を使用して要求と応答ヘッダーのメタデータを圧縮し、転送されるヘッダーのサイズを減らします。
ストリームの優先順位付け:HTTP メッセージはフレームとして送信され、異なるストリームからのフレームをインターリーブできるため、HTTP/2 はストリームの優先順位を指定できます。つまり、受信したすべてのフレームには、ストリームの優先順位に基づいて優先順位を付けることができます。
NSX Advanced Load Balancer は HTTP/2 サーバ プッシュをサポートします。
使用事例
ブラウザを HTTP/2 と互換性のあるものにするために HTTP 1.1 で使用される回避策の手法は不要になりました。
HTTP/2 を使用するすべてのブラウザは、NSX Advanced Load Balancer に展開できます。
gRPC のリバース プロキシを使用するアプリケーションのサポート。
NSX Advanced Load Balancer でサポートされている HTTP/2 用メソッドとモード
TLS 経由の HTTP または SSL 経由の HTTP:NSX Advanced Load Balancer は、すべての HTTP/2 要求に対して TLS 経由の HTTP または SSL 経由の HTTP メソッドをサポートします。このメソッドでは、TLS バージョン 1.2 以降を使用します。
HTTP 設定で使用可能なすべての設定とオプションは、HTTP/2 対応仮想サービスでも使用できます。HTTP ポリシー、DataScript、HTTP タイムアウト設定などの HTTP 機能は、HTTP/2 要求でもサポートされます。
仮想サービス、プール、プール グループの HTTP/2 サポート
HTTP/2 は、フロントエンドおよびバックエンド(サーバ側)接続でサポートされます。HTTP/2 では、次の機能強化を利用できます。
フロントエンド トラフィックの場合、SSL 非対応ポートと SSL 対応ポートの両方で HTTP/2 がサポートされます。
バックエンド トラフィックの場合、HTTP/2 はプール レベルで有効になります。
仮想サービスおよびプールでの HTTP/2 の有効化
HTTP/2 構成オプションは、アプリケーション プロファイルを通じて使用できません。仮想サービス構成を通じてアクセスできます。
次の構成変更は、フロントエンドとバックエンドでの HTTP/2 をサポートします。
http2_enabled フラグは、アプリケーション プロファイルから廃止されています。
enable_http2 フラグは、仮想サービスで使用できます。
プールおよびプール グループ レベルで enable_http2 フラグを使用して、このプールで構成されたすべてのサーバが HTTP/2.0 サーバであることを示すことができます。
NSX Advanced Load Balancer を使用した HTTP/2 の構成
仮想サービスに対して [HTTP2] を構成するには、次の手順を実行します。
の順に移動します。
既存の仮想サービスを編集するか、新しい仮想サービスを作成します。
[HTTP2] チェックボックスを選択します。
で使用可能な必要に応じて SSL 対応ポートと SSL 非対応ポートに対して [HTTP2] を有効にできます。
仮想サービスに関連付けられているプールおよびプール グループに対して [HTTP2] を構成するには、次の手順を実行します。
[プールの作成] をクリックするか、既存のプールを使用します。次に示すように、[サーバ] で使用可能な [HTTP2 の有効化] チェックボックスを選択します。
の順に移動し、
2. プール グループの場合は、[プール グループの作成] をクリックするか、既存のプール グループを使用します。HTTP2 を有効にするには、次に示すように、[プール サーバ] で使用可能な [HTTP2 の有効化] チェックボックスを選択します。
の順に移動し、NSX Advanced Load Balancer ユーザー インターフェイスを使用した HTTP/2 の構成
[HTTP2] を選択します。必要に応じて SSL 対応ポートと SSL 非対応ポートに対して HTTP2 を有効にできます。
の順に移動し、既存の仮想サービスを使用するか、新しい仮想サービスを作成します。 で使用可能な仮想サービスに関連付けられているプールおよびプール グループに対して HTTP2 を有効にします。[プールの作成] をクリックするか、既存のプールを使用します。次に示すように、[サーバ] で使用可能な [HTTP2 の有効化] オプションを選択します。
の順に移動し、プール グループに対して HTTP2 を有効にするには、次に示すように、[ポール サーバ] で使用可能な [HTTP2 の有効化] を選択します。
NSX Advanced Load Balancer CLI を使用した HTTP/2 の構成
構成仮想サービス モードの [enable_http2] フラグを使用します。
仮想サービスの構成
[admin:controller]: > configure virtualservice http2_vs [admin:controller]: virtualservice> services index 1 [admin:controller]: virtualservice:services> enable_http2
同様に、仮想サービスに関連付けられたプールおよびプール グループに対して [enable_http2] フラグを使用します。
プールの構成
[admin:controller]: > configure pool v2-pool [admin:controller]: pool> enable_http2
プール グループの構成
次の手順を使用して、プール グループに対して HTTP/2 を有効にします。
[admin:controller]: > configure poolgroup v2-pg [admin:controller]: poolgroup> enable_http2
既存のプール グループの HTTP/2 の有効化:既存のプール グループに対して HTTP/2 を有効にするには:
プール グループからすべてのプール メンバーを削除します。
上記の手順を使用して、すべてのプールに対して enable_http2 を構成します。
プール グループに対して enable_http2 を構成します。
すべてのプールをプール グループに追加します。
状態の確認
次のコード出力に示すように、show virtualservice <virtual service name>
コマンドは true
として設定されたフラグ値を示します。
[admin:controller]: > show virtualservice http2-vs +------------------------------------+-----------------------------------------------------+ | Field | Value | +------------------------------------+-----------------------------------------------------+ | uuid | virtualservice-2d67f7ed-eeee-4b81-af01-78ded84f4352 | | name | http2-vs | | enabled | True | | services[1] | | | port | 80 | | enable_ssl | False | | port_range_end | 80 | | enable_http2 | True |<---- | services[2] | | | port | 443 | | enable_ssl | True | | port_range_end | 443 |<---- | eable_http2 | True | | application_profile_ref | applicationprofile-22 | | network_profile_ref | System-TCP-Proxy | | pool_ref | v2-pool | | se_group_ref | Default-Group | | http_policies[1] | | | index | 11 | | http_policy_set_ref | http_request_policy_1 | +------------------------------------+-----------------------------------------------------+
[admin:controller]: > show pool v2-pool +---------------------------------------+------------------------------------------------+ | Field | Value | +---------------------------------------+------------------------------------------------+ | uuid | pool-5f38c27f-ff10-48e1-88e2-a9a2b39ad198 | | name | v2-pool | | default_server_port | 80 | | graceful_disable_timeout | 1 min | | connection_ramp_duration | 10 min | | max_concurrent_connections_per_server | 0 | | servers[1] | | | ip | 10.90.103.72 | | port | 80 | | hostname | 10.90.103.72 | | enabled | True | | ratio | 1 | | verify_network | False | | resolve_server_by_dns | False | | static | False | | rewrite_host_header | False | | lb_algorithm | LB_ALGORITHM_LEAST_CONNECTIONS | | lb_algorithm_hash | LB_ALGORITHM_CONSISTENT_HASH_SOURCE_IP_ADDRESS | | inline_health_monitor | True | | use_service_port | False | | capacity_estimation | False | | capacity_estimation_ttfb_thresh | 0 milliseconds | | vrf_ref | global | | fewest_tasks_feedback_delay | 10 sec | | enabled | True | | request_queue_enabled | False | | request_queue_depth | 128 | | host_check_enabled | False | | sni_enabled | True | | rewrite_host_header_to_sni | False | | rewrite_host_header_to_server_name | False | | lb_algorithm_core_nonaffinity | 2 | | lookup_server_by_name | False | | analytics_profile_ref | System-Analytics-Profile | | tenant_ref | admin | | cloud_ref | Default-Cloud | | server_timeout | 0 milliseconds | | delete_server_on_dns_refresh | True | | enable_http2 | True | <----- +---------------------------------------+------------------------------------------------+
制限
キャッシュは HTTP/2 プールではサポートされていません。
アップストリームでの HTTP/2 接続多重化はサポートされていません。
HTTP/2 健全性モニターのサポートは利用できません。バックエンド サーバが HTTP/2 のみをサポートしている場合、このプールでは HTTP(S) 健全性モニターが機能しません。このプールに対しては、TCP または PING 健全性モニターのみを構成する必要があります。
バックエンド サーバが SSL 対応で、HTTP/1 と HTTP/2 の両方をサポートしている場合は、HTTPS 健全性モニターを独自の属性を使用して構成する必要があります。
SSL 非対応ポートの場合、HTTP/1.1 から HTTP/2.0 へのアップグレードはサポートされていません。
クライアントは、SSL 非対応ポートが HTTP/2 のみをサポートできることを認識する必要があります。
バックエンド プールでは、構成されたポートでリッスンしているサーバが HTTP/2 のみをサポートし、HTTP1.1 を HTTP/2.0 アップグレードに送信しないことを前提としています。
プール グループの場合、HTTP バージョンはプール グループと関連付けられているすべてのプール間で一致する必要があります。
一方の側(フロントエンド)での HTTP/1.1 チャンク転送エンコード メカニズムと、もう一方の側(バックエンド)での HTTP/2 チャンク メカニズムは同時にサポートされません。チャンクが存在する場合、つまり、一方の側にチャンク、もう一方の側に V2 チャンクがあるストリーム モードまたは部分バッファ モードが必要な場合、このメソッドはサポートされません。
アップグレード
ポート 80 および 443 でリッスンしている仮想サービスのアプリケーション プロファイルで HTTP/2 が有効になっている場合、アップグレード後、ポート 443 の仮想サービスで HTTP/2 が自動的に有効になります。HTTP/2 は、SSL 非対応ポートであるポート 80 では有効になりません。
HTTP/2 プロファイルの追加の構成オプション
HTTP/2 構成フィールドは、http_profile
のサブフィールド(http2_profile
と呼ばれる)に移動されました。次のフィールドが http2_profile
に追加されました。
max_http2_requests_per_connection
:この値は、クライアント側の HTTP/2 接続を介して送信できる要求の最大数を制御します。値が 0 に設定されている場合、HTTP/2 クライアント側の接続を介して送信できる要求の数に制限がありません。
max_http2_header_field
:このフィールドは、圧縮された要求ヘッダー フィールドの最大サイズ(バイト単位)を制御します。この制限は、1 ~ 8,192 バイトで範囲の要求ヘッダーの名前と値の両方に同様に適用されます。デフォルト値は 4,096 バイトです。
http2_initial_window_size
:このフィールドは、HTTP/2 ストリームの初期フロー制御のウィンドウ サイズを制御します。このフィールドの値の範囲は 64 ~ 32,768 KB です。デフォルト値は 64 KB です。
max_http2_control_frames_per_connection
:このフィールドは、クライアントが HTTP/2 接続を介して送信できる制御フレームの数を制御します。このフィールドの値の範囲は 0 ~ 10,000 であり、デフォルト値は 1,000 です。クライアント側の HTTP/2 接続で無制限の数の制御フレームを送信できるようにするには、値をゼロに設定します。max_http2_queued_frames_to_client_per_connection
:このフィールドは、任意の時点でクライアント側の HTTP/2 接続を介して送信されるまでキューに入れることができるフレームの数を制御します。このフィールドの値の範囲は 0 ~ 10,000 であり、デフォルト値は 1,000 です。このパラメータの値がゼロの場合は、クライアント側の HTTP/2 接続でキューに入れることができるフレームの数に制限がないことを意味します。max_http2_empty_data_frames_per_connection
:このフィールドは、クライアントが HTTP/2 接続を介して送信できる空のデータ フレームの数を制御します。このフィールドの値の範囲は 0 ~ 10,000 であり、デフォルト値は 1,000 です。このパラメータの値がゼロの場合は、クライアント側の HTTP/2 接続を介して送信できる空のデータ フレームの数に制限がないことを意味します。max_http2_concurrent_streams_per_connection
:このフィールドは、クライアント側の HTTP/2 接続を介した同時ストリームの最大数を構成します。このフィールドの値の範囲は 1 ~ 256 であり、デフォルト値は 128 です。
次の CLI スニペットは、上記のオプションのサンプル構成を示しています。NSX Advanced Load Balancer CLI にログインします。applicationprofile
モードと http2_profile オプションを使用して、上記のパラメータの値を変更します。
[admin:controller]: > configure applicationprofile ap-1 Updating an existing object. Currently, the object is: +------------------------------------------------------+---------------------------------------------------------+ | Field | Value | +------------------------------------------------------+---------------------------------------------------------+ | uuid | applicationprofile-1d264f41-d19c-445e-a4df-740dca5957f0 | | name | ap-1 | | type | APPLICATION_PROFILE_TYPE_HTTP | | http_profile | | | connection_multiplexing_enabled | True | | xff_enabled | True | | xff_alternate_name | X-Forwarded-For | | hsts_enabled | False | | hsts_max_age | 365 | | secure_cookie_enabled | False | | httponly_enabled | False | | http_to_https | False | | server_side_redirect_to_https | False | | x_forwarded_proto_enabled | False | | post_accept_timeout | 30000 milliseconds | | client_header_timeout | 10000 milliseconds | | client_body_timeout | 30000 milliseconds | | keepalive_timeout | 30000 milliseconds | | client_max_header_size | 12 kb | | client_max_request_size | 48 kb | | client_max_body_size | 0 kb | | max_rps_unknown_uri | 0 | | max_rps_cip | 0 | | max_rps_uri | 0 | | max_rps_cip_uri | 0 | | ssl_client_certificate_mode | SSL_CLIENT_CERTIFICATE_NONE | | websockets_enabled | True | | max_rps_unknown_cip | 0 | | max_bad_rps_cip | 0 | | max_bad_rps_uri | 0 | | max_bad_rps_cip_uri | 0 | | keepalive_header | False | | use_app_keepalive_timeout | False | | allow_dots_in_header_name | False | | disable_keepalive_posts_msie6 | True | | enable_request_body_buffering | False | | enable_fire_and_forget | False | | max_response_headers_size | 48 kb | | respond_with_100_continue | True | | hsts_subdomains_enabled | True | | enable_request_body_metrics | False | | fwd_close_hdr_for_bound_connections | True | | max_keepalive_requests | 100 | | disable_sni_hostname_check | False | | reset_conn_http_on_ssl_port | False | | http_upstream_buffer_size | 0 kb | | enable_chunk_merge | True | | http2_profile | | | max_http2_control_frames_per_connection | 1000 | | max_http2_queued_frames_to_client_per_connection | 1000 | | max_http2_empty_data_frames_per_connection | 1000 | | max_http2_concurrent_streams_per_connection | 128 | | max_http2_requests_per_connection | 1000 | | max_http2_header_field_size | 4096 bytes | | http2_initial_window_size | 64 kb | | preserve_client_ip | False | | preserve_client_port | False | | preserve_dest_ip_port | False | | tenant_ref | admin | +------------------------------------------------------+---------------------------------------------------------+ [admin:controller]: applicationprofile> http_profile [admin:controller]: applicationprofile:http_profile> http2_profile [admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_control_frames_per_connection 2000 Overwriting the previously entered value for max_http2_control_frames_per_connection [admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_queued_frames_per_connection 2000 No command or arguments found in 'max_http2_queued_frames_per_connection 2000'. [admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_queued_frames_to_client_per_connection 2000 Overwriting the previously entered value for max_http2_queued_frames_to_client_per_connection [admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_concurrent_streams_per_connection 256 Overwriting the previously entered value for max_http2_concurrent_streams_per_connection [admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_requests_per_connection 2500 Overwriting the previously entered value for max_http2_requests_per_connection [admin:controller]: applicationprofile:http_profile:http2_profile> http2_initial_window_size 256 Overwriting the previously entered value for http2_initial_window_size [admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_header_field_size 8192 Overwriting the previously entered value for max_http2_header_field_size [admin:controller]: applicationprofile:http_profile:http2_profile> save [admin:controller]: applicationprofile:http_profile> save [admin:controller]: applicationprofile> save +------------------------------------------------------+---------------------------------------------------------+ | Field | Value | +------------------------------------------------------+---------------------------------------------------------+ | uuid | applicationprofile-1d264f41-d19c-445e-a4df-740dca5957f0 | | name | ap-1 | | type | APPLICATION_PROFILE_TYPE_HTTP | | http_profile | | | connection_multiplexing_enabled | True | | xff_enabled | True | | xff_alternate_name | X-Forwarded-For | | hsts_enabled | False | | hsts_max_age | 365 | | secure_cookie_enabled | False | | httponly_enabled | False | | http_to_https | False | | server_side_redirect_to_https | False | | x_forwarded_proto_enabled | False | | post_accept_timeout | 30000 milliseconds | | client_header_timeout | 10000 milliseconds | | client_body_timeout | 30000 milliseconds | | keepalive_timeout | 30000 milliseconds | | client_max_header_size | 12 kb | | client_max_request_size | 48 kb | | client_max_body_size | 0 kb | | max_rps_unknown_uri | 0 | | max_rps_cip | 0 | | max_rps_uri | 0 | | max_rps_cip_uri | 0 | | ssl_client_certificate_mode | SSL_CLIENT_CERTIFICATE_NONE | | websockets_enabled | True | | max_rps_unknown_cip | 0 | | max_bad_rps_cip | 0 | | max_bad_rps_uri | 0 | | max_bad_rps_cip_uri | 0 | | keepalive_header | False | | use_app_keepalive_timeout | False | | allow_dots_in_header_name | False | | disable_keepalive_posts_msie6 | True | | enable_request_body_buffering | False | | enable_fire_and_forget | False | | max_response_headers_size | 48 kb | | respond_with_100_continue | True | | hsts_subdomains_enabled | True | | enable_request_body_metrics | False | | fwd_close_hdr_for_bound_connections | True | | max_keepalive_requests | 100 | | disable_sni_hostname_check | False | | reset_conn_http_on_ssl_port | False | | http_upstream_buffer_size | 0 kb | | enable_chunk_merge | True | | http2_profile | | | max_http2_control_frames_per_connection | 2000 | | max_http2_queued_frames_to_client_per_connection | 2000 | | max_http2_empty_data_frames_per_connection | 1000 | | max_http2_concurrent_streams_per_connection | 256 | | max_http2_requests_per_connection | 2500 | | max_http2_header_field_size | 8192 bytes | | http2_initial_window_size | 256 kb | | preserve_client_ip | False | | preserve_client_port | False | | preserve_dest_ip_port | False | | tenant_ref | admin | +------------------------------------------------------+---------------------------------------------------------+ [admin:controller]: >
[admin:controller]: > show applicationprofile ap-1 +------------------------------------------------------+---------------------------------------------------------+ | Field | Value | +------------------------------------------------------+---------------------------------------------------------+ | uuid | applicationprofile-1d264f41-d19c-445e-a4df-740dca5957f0 | | name | ap-1 | | type | APPLICATION_PROFILE_TYPE_HTTP | | http_profile | | | connection_multiplexing_enabled | True | | xff_enabled | True | | xff_alternate_name | X-Forwarded-For | | hsts_enabled | False | | hsts_max_age | 365 | | secure_cookie_enabled | False | | httponly_enabled | False | | http_to_https | False | | server_side_redirect_to_https | False | | x_forwarded_proto_enabled | False | | post_accept_timeout | 30000 milliseconds | | client_header_timeout | 10000 milliseconds | | client_body_timeout | 30000 milliseconds | | keepalive_timeout | 30000 milliseconds | | client_max_header_size | 12 kb | | client_max_request_size | 48 kb | | client_max_body_size | 0 kb | | max_rps_unknown_uri | 0 | | max_rps_cip | 0 | | max_rps_uri | 0 | | max_rps_cip_uri | 0 | | ssl_client_certificate_mode | SSL_CLIENT_CERTIFICATE_NONE | | websockets_enabled | True | | max_rps_unknown_cip | 0 | | max_bad_rps_cip | 0 | | max_bad_rps_uri | 0 | | max_bad_rps_cip_uri | 0 | | keepalive_header | False | | use_app_keepalive_timeout | False | | allow_dots_in_header_name | False | | disable_keepalive_posts_msie6 | True | | enable_request_body_buffering | False | | enable_fire_and_forget | False | | max_response_headers_size | 48 kb | | respond_with_100_continue | True | | hsts_subdomains_enabled | True | | enable_request_body_metrics | False | | fwd_close_hdr_for_bound_connections | True | | max_keepalive_requests | 100 | | disable_sni_hostname_check | False | | reset_conn_http_on_ssl_port | False | | http_upstream_buffer_size | 0 kb | | enable_chunk_merge | True | | http2_profile | | | max_http2_control_frames_per_connection | 1000 | | max_http2_queued_frames_to_client_per_connection | 1000 | | max_http2_empty_data_frames_per_connection | 1000 | | max_http2_concurrent_streams_per_connection | 128 | | max_http2_requests_per_connection | 1000 | | max_http2_header_field_size | 4096 bytes | | http2_initial_window_size | 64 kb | | preserve_client_ip | False | | preserve_client_port | False | | preserve_dest_ip_port | False | | tenant_ref | admin | +------------------------------------------------------+---------------------------------------------------------+
ログ
ログは、次のいずれかのモードを使用して確認できます。
NSX Advanced Load Balancer ユーザー インターフェイスの使用
NSX Advanced Load Balancer CLI の使用
ユーザー インターフェイスを使用したログの確認
NSX Advanced Load Balancer のアプリケーション ログには、要求の HTTP バージョンとして HTTP/2.0 が表示されます。 の順に移動し、目的の仮想サービスを選択し、[ログ] タブに移動してログを確認します。
HTTP/2 要求と応答に関連するエラーは、[重要なログ] で確認できます。
CLI を使用したログの確認
HTTP/2 機能で使用可能なカウンタは次のとおりです。このカウンタはトラブルシューティング中に使用できます。
要求処理エラー
応答コード(2xx、3xx、4xx、および 5xx)
プロトコル エラー
フロー制御エラー
フレーム サイズ エラー
圧縮エラー
ストリーム拒否エラー
show virtualservice <virtual service name> detail
コマンドを使用して、HTTP/2 メソッドで使用可能なカウンタを確認します。
[admin:controller]: > show virtualservice <virtual service name> detail | cache_bytes | 0 | | http2_requests_handled | 2 | | http2_response_2xx | 2 | | http2_response_3xx | 0 | | http2_response_4xx | 0 | | http2_response_5xx | 0 | | http2_protocol_errors | 0 | | http2_flow_control_errors | 0 | | http2_frame_size_errors | 0 | | http2_compression_errors | 0 | | http2_refused_stream_errors | 0 | | http2_enhance_your_calm | 0 | | http2_miscellaneous_errors | 0
show pool <pool name> detail
コマンドを使用して、プール状態の HTTP/2 関連エラーを確認します。
[admin:controller]: > show pool v2-pool detail | grep http2 | http2_protocol_header_errors | 0 | | http2_protocol_other_errors | 0 | | http2_flow_control_errors | 0 | | http2_frame_size_errors | 0 | | http2_compression_errors | 0 | | http2_refused_stream_errors | 0 | | http2_enhance_your_calm | 0 | | http2_misc_errors | 0 | [admin:controller]:
HPACK 動的テーブル
HPACK には、静的テーブルに加えて、接続レベルの動的テーブルがあります。この動的テーブルは、位置 62(静的テーブルの後)から始まり、SETTINGS フレームの SETTINGS_HEADER_TABLE_SIZE 値で定義された最大テーブル サイズで終わります。明示的に定義されていない場合、デフォルトのサイズは 4,096 オクテットです。最大テーブル サイズに達すると、最も古いエントリが削除されます。このプロセスを容易にするために、テーブルへの書き込み時に各エントリが増分します。
ヘッダーのテーブル エントリ位置は静的ではありません。現在および将来の要求で新しいヘッダーがテーブルに追加されると、継続的に増分します。TCP はこの順序を保証するため、HTTP/2 では、動的テーブルは各 TCP 接続に固有です。
HPACK ヘッダー タイプの詳細については、RFC7541 を参照してください。
動的 HPACK テーブルは、クライアント側で既にサポートされています。バージョン 22.1.1 以降では、NSX Advanced Load Balancer にサーバ側のサポートが追加されました。
サーバ側では、NSX Advanced Load Balancer が HTTP2 接続を作成しようとすると、仮想サービスでキャッシュが有効になっているかどうかを確認します。キャッシュが有効になっている場合、SETTINGS フレームで SETTINGS_HEADER_TABLE_SIZE 値をゼロに設定することで、動的 HPACK テーブルをオフにします。キャッシュが有効になっていない場合、NSX Advanced Load Balancer は SETTINGS_HEADER_TABLE_SIZE を 4k に設定します。SETTINGS_HEADER_TABLE_SIZE は構成できません。