# Class Http2Protocol

java.lang.Object
org.apache.coyote.http2.Http2Protocol

All Implemented Interfaces:
  `UpgradeProtocol`

public class Http2Protocol extends Object implements UpgradeProtocol
HTTP/2 protocol handler. Implements the `UpgradeProtocol` interface to allow HTTP/2 to be used as an upgrade from HTTP/1.1 or via ALPN.

## Constructor Summary

Constructors
Constructor
Description
`Http2Protocol()`
Creates a new instance of the HTTP/2 protocol handler.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`accept(Request request)`
Allows the implementation to examine the request and accept or reject it based on what it finds.
`boolean`
`getAllowSchemeMismatch()`
Are HTTP/2 streams allowed to provide a scheme that is inconsistent with the transport over which the stream was received?
`byte[]`
`getAlpnIdentifier()`
Returns the byte sequence as listed in the IANA registry for this protocol.
`String`
`getAlpnName()`
Returns the name of the protocol as listed in the IANA registry.
`ContinueResponseTiming`
`getContinueResponseTimingInternal()`
Returns the timing for 100-continue responses.
`boolean`
`getDiscardRequestsAndResponses()`
Returns whether requests and responses are discarded after processing.
`long`
`getDrainTimeout()`
Returns the drain timeout in nanoseconds.
`RequestGroupInfo`
`getGlobal()`
Returns the global request group info for JMX statistics.
`AbstractHttp11Protocol<?>`
`getHttp11Protocol()`
Returns the parent HTTP/1.1 protocol handler.
`String`
`getHttpUpgradeName(boolean isSSLEnabled)`
Returns the name that clients will use to request an upgrade to this protocol.
`int`
`getInitialWindowSize()`
Returns the initial window size advertised to the client.
`boolean`
`getInitiatePingDisabled()`
Returns whether periodic PING frames are disabled.
`InternalHttpUpgradeHandler`
`getInternalUpgradeHandler(SocketWrapperBase<?> socketWrapper, Adapter adapter, Request coyoteRequest)`
Returns an instance of the HTTP upgrade handler for this protocol.
`long`
`getKeepAliveTimeout()`
Returns the keep-alive timeout in milliseconds.
`int`
`getMaxConcurrentStreamExecution()`
Returns the maximum number of concurrently executing streams.
`long`
`getMaxConcurrentStreams()`
Returns the maximum number of concurrent streams.
`int`
`getMaxHeaderCount()`
Returns the maximum number of headers allowed per request.
`int`
`getMaxHeaderSize()`
Returns the maximum size of request headers in bytes.
`int`
`getMaxTrailerCount()`
Returns the maximum number of trailer headers allowed per request.
`int`
`getMaxTrailerSize()`
Returns the maximum size of trailer headers in bytes.
`int`
`getOverheadContinuationThreshold()`
Returns the payload size threshold for CONTINUATION frame overhead tracking.
`int`
`getOverheadCountFactor()`
Returns the overhead count factor used for overhead frame tracking.
`int`
`getOverheadDataThreshold()`
Returns the payload size threshold for DATA frame overhead tracking.
`int`
`getOverheadResetFactor()`
Returns the overhead reset factor used for RST frame tracking.
`int`
`getOverheadWindowUpdateThreshold()`
Returns the payload size threshold for WINDOW_UPDATE frame overhead tracking.
`Processor`
`getProcessor(SocketWrapperBase<?> socketWrapper, Adapter adapter)`
Returns a processor instance for processing a connection using this protocol.
`long`
`getReadTimeout()`
Returns the read timeout in milliseconds.
`long`
`getStreamReadTimeout()`
Returns the stream-level read timeout in milliseconds.
`long`
`getStreamWriteTimeout()`
Returns the stream-level write timeout in milliseconds.
`String`
`getUpgradeProtocolName()`
Returns the name of the upgrade protocol (h2 for SSL, h2c for plain).
`boolean`
`getUseSendfile()`
Returns whether sendfile is enabled.
`long`
`getWriteTimeout()`
Returns the write timeout in milliseconds.
`void`
`setAllowSchemeMismatch(boolean allowSchemeMismatch)`
Configure whether HTTP/2 streams atr allowed to provide a scheme that is inconsistent with the transport over which the stream was received
`void`
`setDiscardRequestsAndResponses(boolean discardRequestsAndResponses)`
Sets whether requests and responses should be discarded after processing.
`void`
`setDrainTimeout(long drainTimeout)`
Sets the drain timeout in nanoseconds.
`void`
`setHttp11Protocol(AbstractHttp11Protocol<?> http11Protocol)`
Configure the HTTP/1.1 protocol that this UpgradeProcotol is nested under.
`void`
`setInitialWindowSize(int initialWindowSize)`
Sets the initial window size advertised to the client.
`void`
`setInitiatePingDisabled(boolean initiatePingDisabled)`
Disables or enables the periodic PING frames used to keep the connection alive.
`void`
`setKeepAliveTimeout(long keepAliveTimeout)`
Sets the keep-alive timeout in milliseconds.
`void`
`setMaxConcurrentStreamExecution(int maxConcurrentStreamExecution)`
Sets the maximum number of concurrently executing streams.
`void`
`setMaxConcurrentStreams(long maxConcurrentStreams)`
Sets the maximum number of concurrent streams.
`void`
`setMaxHeaderCount(int maxHeaderCount)`
Sets the maximum number of headers allowed per request.
`void`
`setMaxTrailerCount(int maxTrailerCount)`
Sets the maximum number of trailer headers allowed per request.
`void`
`setOverheadContinuationThreshold(int overheadContinuationThreshold)`
Sets the payload size threshold for CONTINUATION frame overhead tracking.
`void`
`setOverheadCountFactor(int overheadCountFactor)`
Sets the overhead count factor used for overhead frame tracking.
`void`
`setOverheadDataThreshold(int overheadDataThreshold)`
Sets the payload size threshold for DATA frame overhead tracking.
`void`
`setOverheadResetFactor(int overheadResetFactor)`
Sets the overhead reset factor used for RST frame tracking.
`void`
`setOverheadWindowUpdateThreshold(int overheadWindowUpdateThreshold)`
Sets the payload size threshold for WINDOW_UPDATE frame overhead tracking.
`void`
`setReadTimeout(long readTimeout)`
Sets the read timeout in milliseconds.
`void`
`setStreamReadTimeout(long streamReadTimeout)`
Sets the stream-level read timeout in milliseconds.
`void`
`setStreamWriteTimeout(long streamWriteTimeout)`
Sets the stream-level write timeout in milliseconds.
`void`
`setUseSendfile(boolean useSendfile)`
Enables or disables sendfile.
`void`
`setWriteTimeout(long writeTimeout)`
Sets the write timeout in milliseconds.
`boolean`
`useCompression(Request request, Response response)`
Determines whether compression should be used for the given request/response pair.

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### Http2Protocol

public Http2Protocol()
Creates a new instance of the HTTP/2 protocol handler.

## Method Details

### getHttpUpgradeName

public String getHttpUpgradeName(boolean isSSLEnabled)
Description copied from interface: `UpgradeProtocol`
Returns the name that clients will use to request an upgrade to this protocol.

Specified by:
  `getHttpUpgradeName` in interface `UpgradeProtocol`
Parameters:
  `isSSLEnabled` - Is this for a connector that is configured to support TLS. Some protocols (e.g. HTTP/2) only support HTTP upgrade over non-secure connections.
Returns:
  The name that clients will use to request an upgrade to this protocol via an HTTP/1.1 upgrade request or `null` if upgrade via an HTTP/1.1 upgrade request is not supported.

### getAlpnIdentifier

public byte[] getAlpnIdentifier()
Description copied from interface: `UpgradeProtocol`
Returns the byte sequence as listed in the IANA registry for this protocol.

Specified by:
  `getAlpnIdentifier` in interface `UpgradeProtocol`
Returns:
  The byte sequence as listed in the IANA registry for this protocol or `null` if upgrade via ALPN is not supported.

### getAlpnName

public String getAlpnName()
Description copied from interface: `UpgradeProtocol`
Returns the name of the protocol as listed in the IANA registry.

Specified by:
  `getAlpnName` in interface `UpgradeProtocol`
Returns:
  The name of the protocol as listed in the IANA registry if and only if `UpgradeProtocol.getAlpnIdentifier()` returns the UTF-8 encoding of this name. If `UpgradeProtocol.getAlpnIdentifier()` returns some other byte sequence, then this method returns the empty string. If upgrade via ALPN is not supported then `null` is returned.

### getProcessor

public Processor getProcessor(SocketWrapperBase<?> socketWrapper, Adapter adapter)
Description copied from interface: `UpgradeProtocol`
Returns a processor instance for processing a connection using this protocol.

Specified by:
  `getProcessor` in interface `UpgradeProtocol`
Parameters:
  `socketWrapper` - The socketWrapper for the connection that requires a processor
  `adapter` - The Adapter instance that provides access to the standard Engine/Host/Context/Wrapper processing chain
Returns:
  A processor instance for processing a connection using this protocol.

### getInternalUpgradeHandler

public InternalHttpUpgradeHandler getInternalUpgradeHandler(SocketWrapperBase<?> socketWrapper, Adapter adapter, Request coyoteRequest)
Description copied from interface: `UpgradeProtocol`
Returns an instance of the HTTP upgrade handler for this protocol.

Specified by:
  `getInternalUpgradeHandler` in interface `UpgradeProtocol`
Parameters:
  `socketWrapper` - The socket
  `adapter` - The Adapter to use to configure the new upgrade handler
  `coyoteRequest` - A copy (may be incomplete) of the request that triggered the upgrade
Returns:
  An instance of the HTTP upgrade handler for this protocol

### accept

public boolean accept(Request request)
Description copied from interface: `UpgradeProtocol`
Allows the implementation to examine the request and accept or reject it based on what it finds.

Specified by:
  `accept` in interface `UpgradeProtocol`
Parameters:
  `request` - The request that included an upgrade header for this protocol
Returns:
  `true` if the request is accepted, otherwise `false`

### getAllowSchemeMismatch

public boolean getAllowSchemeMismatch()
Are HTTP/2 streams allowed to provide a scheme that is inconsistent with the transport over which the stream was received?

Returns:
  `true` if a mismatched scheme is permitted, otherwise `false`

### setAllowSchemeMismatch

public void setAllowSchemeMismatch(boolean allowSchemeMismatch)
Configure whether HTTP/2 streams atr allowed to provide a scheme that is inconsistent with the transport over which the stream was received

Parameters:
  `allowSchemeMismatch` - `true` if a mismatched scheme is permitted, otherwise `false`

### getReadTimeout

public long getReadTimeout()
Returns the read timeout in milliseconds.

Returns:
  the read timeout

### setReadTimeout

public void setReadTimeout(long readTimeout)
Sets the read timeout in milliseconds.

Parameters:
  `readTimeout` - the read timeout

### getWriteTimeout

public long getWriteTimeout()
Returns the write timeout in milliseconds.

Returns:
  the write timeout

### setWriteTimeout

public void setWriteTimeout(long writeTimeout)
Sets the write timeout in milliseconds.

Parameters:
  `writeTimeout` - the write timeout

### getKeepAliveTimeout

public long getKeepAliveTimeout()
Returns the keep-alive timeout in milliseconds.

Returns:
  the keep-alive timeout

### setKeepAliveTimeout

public void setKeepAliveTimeout(long keepAliveTimeout)
Sets the keep-alive timeout in milliseconds.

Parameters:
  `keepAliveTimeout` - the keep-alive timeout

### getStreamReadTimeout

public long getStreamReadTimeout()
Returns the stream-level read timeout in milliseconds.

Returns:
  the stream read timeout

### setStreamReadTimeout

public void setStreamReadTimeout(long streamReadTimeout)
Sets the stream-level read timeout in milliseconds.

Parameters:
  `streamReadTimeout` - the stream read timeout

### getStreamWriteTimeout

public long getStreamWriteTimeout()
Returns the stream-level write timeout in milliseconds.

Returns:
  the stream write timeout

### setStreamWriteTimeout

public void setStreamWriteTimeout(long streamWriteTimeout)
Sets the stream-level write timeout in milliseconds.

Parameters:
  `streamWriteTimeout` - the stream write timeout

### getMaxConcurrentStreams

public long getMaxConcurrentStreams()
Returns the maximum number of concurrent streams.

Returns:
  the maximum concurrent streams

### setMaxConcurrentStreams

public void setMaxConcurrentStreams(long maxConcurrentStreams)
Sets the maximum number of concurrent streams.

Parameters:
  `maxConcurrentStreams` - the maximum concurrent streams

### getMaxConcurrentStreamExecution

public int getMaxConcurrentStreamExecution()
Returns the maximum number of concurrently executing streams.

Returns:
  the maximum concurrent stream execution count

### setMaxConcurrentStreamExecution

public void setMaxConcurrentStreamExecution(int maxConcurrentStreamExecution)
Sets the maximum number of concurrently executing streams.

Parameters:
  `maxConcurrentStreamExecution` - the maximum concurrent stream execution count

### getInitialWindowSize

public int getInitialWindowSize()
Returns the initial window size advertised to the client.

Returns:
  the initial window size

### setInitialWindowSize

public void setInitialWindowSize(int initialWindowSize)
Sets the initial window size advertised to the client.

Parameters:
  `initialWindowSize` - the initial window size

### getUseSendfile

public boolean getUseSendfile()
Returns whether sendfile is enabled.

Returns:
  `true` if sendfile is enabled

### setUseSendfile

public void setUseSendfile(boolean useSendfile)
Enables or disables sendfile.

Parameters:
  `useSendfile` - `true` to enable sendfile

### setMaxHeaderCount

public void setMaxHeaderCount(int maxHeaderCount)
Sets the maximum number of headers allowed per request.

Parameters:
  `maxHeaderCount` - the maximum header count

### getMaxHeaderCount

public int getMaxHeaderCount()
Returns the maximum number of headers allowed per request.

Returns:
  the maximum header count

### getMaxHeaderSize

public int getMaxHeaderSize()
Returns the maximum size of request headers in bytes.

Returns:
  the maximum header size

### setMaxTrailerCount

public void setMaxTrailerCount(int maxTrailerCount)
Sets the maximum number of trailer headers allowed per request.

Parameters:
  `maxTrailerCount` - the maximum trailer count

### getMaxTrailerCount

public int getMaxTrailerCount()
Returns the maximum number of trailer headers allowed per request.

Returns:
  the maximum trailer count

### getMaxTrailerSize

public int getMaxTrailerSize()
Returns the maximum size of trailer headers in bytes.

Returns:
  the maximum trailer size

### getOverheadCountFactor

public int getOverheadCountFactor()
Returns the overhead count factor used for overhead frame tracking.

Returns:
  the overhead count factor

### setOverheadCountFactor

public void setOverheadCountFactor(int overheadCountFactor)
Sets the overhead count factor used for overhead frame tracking.

Parameters:
  `overheadCountFactor` - the overhead count factor

### getOverheadResetFactor

public int getOverheadResetFactor()
Returns the overhead reset factor used for RST frame tracking.

Returns:
  the overhead reset factor

### setOverheadResetFactor

public void setOverheadResetFactor(int overheadResetFactor)
Sets the overhead reset factor used for RST frame tracking.

Parameters:
  `overheadResetFactor` - the overhead reset factor

### getOverheadContinuationThreshold

public int getOverheadContinuationThreshold()
Returns the payload size threshold for CONTINUATION frame overhead tracking.

Returns:
  the continuation threshold

### setOverheadContinuationThreshold

public void setOverheadContinuationThreshold(int overheadContinuationThreshold)
Sets the payload size threshold for CONTINUATION frame overhead tracking.

Parameters:
  `overheadContinuationThreshold` - the continuation threshold

### getOverheadDataThreshold

public int getOverheadDataThreshold()
Returns the payload size threshold for DATA frame overhead tracking.

Returns:
  the data threshold

### setOverheadDataThreshold

public void setOverheadDataThreshold(int overheadDataThreshold)
Sets the payload size threshold for DATA frame overhead tracking.

Parameters:
  `overheadDataThreshold` - the data threshold

### getOverheadWindowUpdateThreshold

public int getOverheadWindowUpdateThreshold()
Returns the payload size threshold for WINDOW_UPDATE frame overhead tracking.

Returns:
  the window update threshold

### setOverheadWindowUpdateThreshold

public void setOverheadWindowUpdateThreshold(int overheadWindowUpdateThreshold)
Sets the payload size threshold for WINDOW_UPDATE frame overhead tracking.

Parameters:
  `overheadWindowUpdateThreshold` - the window update threshold

### setInitiatePingDisabled

public void setInitiatePingDisabled(boolean initiatePingDisabled)
Disables or enables the periodic PING frames used to keep the connection alive.

Parameters:
  `initiatePingDisabled` - `true` to disable periodic PING frames

### getInitiatePingDisabled

public boolean getInitiatePingDisabled()
Returns whether periodic PING frames are disabled.

Returns:
  `true` if periodic PING frames are disabled

### useCompression

public boolean useCompression(Request request, Response response)
Determines whether compression should be used for the given request/response pair.

Parameters:
  `request` - The request
  `response` - The response
Returns:
  `true` if compression should be used

### getContinueResponseTimingInternal

public ContinueResponseTiming getContinueResponseTimingInternal()
Returns the timing for 100-continue responses.

Returns:
  the continue response timing

### getHttp11Protocol

public AbstractHttp11Protocol<?> getHttp11Protocol()
Returns the parent HTTP/1.1 protocol handler.

Returns:
  the HTTP/1.1 protocol handler

### setHttp11Protocol

public void setHttp11Protocol(AbstractHttp11Protocol<?> http11Protocol)
Description copied from interface: `UpgradeProtocol`
Configure the HTTP/1.1 protocol that this UpgradeProcotol is nested under. Connections passed to this UpgradeProtocol via HTTP upgrade will have been initially handled by this HTTP/1.1 protocol implementation.

The default implementation is a NO-OP.

Specified by:
  `setHttp11Protocol` in interface `UpgradeProtocol`
Parameters:
  `http11Protocol` - The HTTP/1.1 protocol implementation that will initially handle any connections passed to this UpgradeProtocol via the HTTP upgrade mechanism

### getUpgradeProtocolName

public String getUpgradeProtocolName()
Returns the name of the upgrade protocol (h2 for SSL, h2c for plain).

Returns:
  the upgrade protocol name

### getGlobal

public RequestGroupInfo getGlobal()
Returns the global request group info for JMX statistics.

Returns:
  the global request group info

### getDiscardRequestsAndResponses

public boolean getDiscardRequestsAndResponses()
Returns whether requests and responses are discarded after processing.

Returns:
  `true` if requests and responses are discarded

### setDiscardRequestsAndResponses

public void setDiscardRequestsAndResponses(boolean discardRequestsAndResponses)
Sets whether requests and responses should be discarded after processing.

Parameters:
  `discardRequestsAndResponses` - `true` to discard requests and responses

### getDrainTimeout

public long getDrainTimeout()
Returns the drain timeout in nanoseconds.

Returns:
  the drain timeout

### setDrainTimeout

public void setDrainTimeout(long drainTimeout)
Sets the drain timeout in nanoseconds.

Parameters:
  `drainTimeout` - the drain timeout