Configuring HTTP/2 on the NetScaler appliance

Note: The HTTP/2 functionality is supported on the NetScaler MPX, VPX, and SDX models. For NetScaler VPX, the HTTP/2 functionality is supported from 11.0 release onwards.

The problem with web application performance is directly related to the trend toward increasing the page size and the number of objects on the web pages. HTTP/1.1 was developed to support smaller web pages, slower Internet connections, and more limited server hardware than are common today. It is not well suited for newer technologies such as JavaScript and cascading style sheets (CSS), nor for new media types such as Flash videos and graphics-rich images, because it can request only one resource per connection to the server. This limitation significantly increases the number of round trips, causing longer page-rendering time and reduced network performance.

The HTTP/2 protocol addresses these limitations by allowing communication to occur with less data transmitted over the network, and providing the ability to send multiple requests and responses across a single connection. At its core, HTTP/2 addresses the key limitations of HTTP/1.1 by using the underlying network connections more efficiently. It changes the way requests and responses travel over the network.

HTTP/2 is a binary protocol. It is more efficient to parse, more compact on the wire, and most importantly, it is less error-prone, compared to textual protocols like HTTP/1.1. The HTTP/2 protocol uses a binary framing layer that defines the frame type and how HTTP messages are encapsulated and transferred between the client and server.The HTTP/2 functionality supports the use of the CONNECT method to establish a tunnel connection through a single HTTP/2 stream to a remote host.

The HTTP/2 protocol includes a lot of performance-enhancing changes that significantly improve performance, particularly for clients connecting over a mobile network.

The following table lists the major improvements in HTTP/2 over HTTP/1.1:

HTTP/2 Features Description
Header Compression HTTP headers have a lot of repetitive information and therefore consume unnecessary bandwidth during data transmission. HTTP/2 reduces bandwidth requirements by compressing the header and minimizing the requirement to transport HTTP headers with every request and response.
Connection Multiplexing Latency can have a huge impact on page load times and the end user experience. Connection multiplexing overcomes this problem by sending multiple requests and responses across a single connection.
Server Push Server push enables the server to proactively push content to the client browser, avoiding round trip delay. This feature caches the responses it thinks the client will need, reduces the number round trips, and improves the page rendering time. Important: The NetScaler appliance does not support the server push functionality.
No Head-of-line Blocking Under HTTP/1.1, browsers can download one resource at a time per connection. When a browser has to download a large resource, it blocks all other resources from downloading until the first download is complete. HTTP/2 overcomes this problem with a multiplexing approach. It allows the client browser to download other web components in parallel over the same connection and display them as they become available.
Request Prioritization Not all resources have equal priority when the browser renders a web page. To accelerate the load time, all modern browsers prioritize requests by type of asset, their location on the page, and even by learned priority from previous visits. With HTTP/1.1, the browser has limited ability to leverage the priority data, because this protocol does not support multiplexing, and there is no way to communicate request prioritization by the server. The result is unnecessary network latency. HTTP/2 overcomes this problem by allowing the browser to dispatch all requests. The browser can communicate its stream prioritization preference via stream dependencies and weights, enabling the servers to optimize response delivery. Important: The NetScaler appliance does not support the request prioritization functionality.

How HTTP/2 works on a NetScaler appliance

A NetScaler appliance supports HTTP/2 on the client side as well on the server side. On the client side, the NetScaler appliance acts as a server that hosts an HTTP/HTTPS virtual server for HTTP/2. On the backend side, the NetScaler acts as a client to the servers that are bound to the virtual server.

Therefore, the NetScaler appliance maintains separate connections on the client side as well on the server side. The NetScaler appliance has separate HTTP/2 configurations for the client side and the server side.

HTTP/2 for HTTPS (SSL) load balancing configuration

For an HTTPS load balancing configuration, the NetScaler appliance uses the TLS ALPN extension (RFC 7301) to determine whether the client/server supports HTTP/2. If it does, the appliance chooses HTTP/2 as the application-layer protocol to transmit data (as described in RFC 7540 - Section 3.3) on the client/server side. The appliance uses the following order of preference when choosing the application-layer protocol through the TLS ALPN extension:

  • HTTP/2 (if enabled in the HTTP profile)
  • SPDY (if enabled in the HTTP profile)
  • HTTP/1.1

HTTP/2 for HTTP load balancing configuration

For an HTTP load balancing configuration, the NetScaler appliance uses one of the following methods to start communicating with the client/server using HTTP/2.

Note

In the following method descriptions, client and server are generals terms for an HTTP/2 connection. For example, for a load balancing setup of a NetScaler appliance using HTTP/2, the NetScaler appliance acts as a server on the client side and acts as a client to the server side.

If the HTTP/2 setting is enabled on the HTTP profile associated with the virtual server, the NetScaler appliance does NOT support the direct use of HTTP/2, but still it acts as a TCP proxy by forwarding the HTTP/2 requests to servers.

Configuring HTTP/2

The HTTP/2 feature is part of the HTTP configurations on the NetScaler appliance. By default, the HTTP/2 feature is disabled. You have to enable the feature on a specific HTTP profile and associate the HTTP profile with services or virtual servers on which you want to use the HTTP/2 feature.

To know more about binding a HTTP profile to a virtual server, see Setting Service or Virtual Server Specific HTTP Parameters section on HTTP Configuration page.

Note

The HTTP/2 functionality will not work, if User Source IP (USIP) mode is enabled and the Proxy mode is disabled on the NetScaler appliance.

To configure HTTP/2 by using the Citrix ADC GUI

  1. Create a HTTP/2 profile on the NetScaler appliance. Navigate to System > Profiles, click HTTP Profiles and then click Add to create a HTTP profile with HTTP/2 checkbox selected.
  2. [Optional] Configure HTTP/2 header table size. Navigate to System > Profiles, select a HTTP Profile and click Edit to specify the maximum size of the header compression table in the HTTP/2 Header Table Size text box.
  3. [Optional] Configure HTTP/2 initial window size Navigate to System > Profiles, select a HTTP Profile and click Edit to specify initial window size for an HTTP/2 stream in the the HTTP/2 Initial Window Size text box.
  4. [Optional] Configure HTTP/2 maximum concurrent streams.

    Navigate to System > Profiles, select a HTTP Profile and click Edit to specify the maximum number of concurrent streams per connection in the HTTP/2 Maximum Concurrent Streams text box .

  5. [Optional] Configure HTTP/2 maximum frame size. Navigate to System > Profiles, select a HTTP Profiles and click Edit to specify the maximum size of the frame in the HTTP/2 Maximum Frame Size text box.
  6. [Optional] Configure HTTP/2 maximum header list size. Navigate to System > Profiles, select a HTTP Profiles and click Edit to specify the header size the Maximum Header List Size text box.