To support clients requiring chunk boundaries to be maintained the way the server sent them, a new Boolean parameter, enable_chunk_merge
, has been introduced for use within the HTTP application profile. It can be used to deactivate the chunk body merge when response buffer mode is not configured.
Parameter Settings
The enable_chunk_merge parameter takes on one of two values:
When set to
True
(the default), if the back-end server sends chunked HTTP responses, the NSX Advanced Load Balancer SE merges chunks that are received together into a single chunk before forwarding its response to the client. If the server is slow, SE will not wait for the server to send all the chunks.For instance, if the server has seven chunks, but the SE only receives the first three chunks when it is scheduled to process the response, it will merge all the three chunks into one big chunk and forward it to the client. Next time, if the SE has received all four of the remaining chunks, it will merge them into one and forward it to the client. Chunk merging has been the behavior of NSX Advanced Load Balancer from the beginning.
When set to
False
, in case of a chunked HTTP response, if response buffer mode is not configured, the NSX Advanced Load Balancer SE forwards the chunks received from the server as is. In addition, the response body, which is in chunked mode, will not get cached. If the cache is configured, the saved cache entry needs to be cleared.
UI Configuration
The Enable Chunk Merge option appears under the General tab of the Application Profile editor, as shown below.
CLI Data Structure for an HTTP Application Profile
[admin:controller]: > show applicationprofile applicationprofile-1 +---------------------------------------+---------------------------------------------------------+ | Field | Value | +---------------------------------------+---------------------------------------------------------+ | uuid | applicationprofile-d9016ba3-cb99-474a-bcd2-3f459984002d | | name | applicationprofile-1 | | type | APPLICATION_PROFILE_TYPE_HTTP | | http_profile | | | connection_multiplexing_enabled | True | | xff_enabled | True | | xff_alternate_name | X-Forwarded-For | | ssl_everywhere_enabled | False | | 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 | | spdy_enabled | False | | spdy_fwd_proxy_mode | 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 | False | | preserve_client_ip | False | | preserve_client_port | False | | tenant_ref | admin | +---------------------------------------+---------------------------------------------------------+