# Class AbstractHttp11Protocol<S>

java.lang.Object
org.apache.coyote.AbstractProtocol<S>
org.apache.coyote.http11.AbstractHttp11Protocol<S>

All Implemented Interfaces:
  `MBeanRegistration, ProtocolHandler`

Direct Known Subclasses:
  `AbstractHttp11JsseProtocol`

public abstract class AbstractHttp11Protocol<S> extends AbstractProtocol<S>

## Nested Class Summary

### Nested classes/interfaces inherited from class AbstractProtocol

`AbstractProtocol.ConnectionHandler<S>, AbstractProtocol.RecycledProcessors`

## Field Summary

Fields
Modifier and Type
Field
Description
`protected static final StringManager`
`sm`

### Fields inherited from class AbstractProtocol

`adapter, domain, mserver, oname, processorCache, rgOname`

## Constructor Summary

Constructors
Constructor
Description
`AbstractHttp11Protocol(AbstractEndpoint<S,?> endpoint)`

## Method Summary

Modifier and Type
Method
Description
`void`
`addAllowedTrailerHeader(String header)`
`void`
`addSslHostConfig(SSLHostConfig sslHostConfig)`
Add a new SSL configuration for a virtual host.
`void`
`addSslHostConfig(SSLHostConfig sslHostConfig, boolean replace)`
Add a new SSL configuration for a virtual host.
`void`
`addUpgradeProtocol(UpgradeProtocol upgradeProtocol)`
Add a new protocol for used by HTTP/1.1 upgrade or ALPN.
`boolean`
`checkSni(String sniHostName, String protocolHostName)`
`protected Processor`
`createProcessor()`
Create and configure a new Processor instance for the current protocol implementation.
`protected Processor`
`createUpgradeProcessor(SocketWrapperBase<?> socket, UpgradeToken upgradeToken)`
`void`
`destroy()`
Destroy the protocol (optional).
`SSLHostConfig[]`
`findSslHostConfigs()`
Find all configured SSL virtual host configurations which will be used by SNI.
`UpgradeProtocol[]`
`findUpgradeProtocols()`
Return all configured upgrade protocols.
`String`
`getAllowedTrailerHeaders()`
`protected Set<String>`
`getAllowedTrailerHeadersInternal()`
`boolean`
`getAllowHostHeaderMismatch()`
Deprecated.
This will removed in Tomcat 11 onwards where `allowHostHeaderMismatch` will be hard-coded to `false`.
`String`
`getCompressibleMimeType()`
`String[]`
`getCompressibleMimeTypes()`
`String`
`getCompression()`
`protected int`
`getCompressionLevel()`
`int`
`getCompressionMinSize()`
`int`
`getConnectionUploadTimeout()`
Specifies a different (usually longer) connection timeout during data upload.
`String`
`getContinueResponseTiming()`
`ContinueResponseTiming`
`getContinueResponseTimingInternal()`
`String`
`getDefaultSSLHostConfigName()`
`boolean`
`getDisableUploadTimeout()`
Get the flag that controls upload time-outs.
`protected AbstractEndpoint<S,?>`
`getEndpoint()`
`HttpParser`
`getHttpParser()`
`int`
`getMaxExtensionSize()`
`int`
`getMaxHttpHeaderSize()`
`int`
`getMaxHttpRequestHeaderSize()`
`int`
`getMaxHttpResponseHeaderSize()`
`int`
`getMaxKeepAliveRequests()`
`int`
`getMaxSavePostSize()`
Return the maximum size of the post which will be saved during FORM or CLIENT-CERT authentication.
`int`
`getMaxSwallowSize()`
`int`
`getMaxTrailerSize()`
`UpgradeProtocol`
`getNegotiatedProtocol(String negotiatedName)`
Find a suitable handler for the protocol negotiated at the network layer.
`String`
`getNoCompressionUserAgents()`
`protected Pattern`
`getNoCompressionUserAgentsPattern()`
`ObjectName`
`getONameForUpgrade(String upgradeProtocol)`
`protected String`
`getProtocolName()`
Obtain the name of the protocol, (Http, Ajp, etc.).
`boolean`
`getRejectIllegalHeader()`
Deprecated.
This will removed in Tomcat 11 onwards where `allowHostHeaderMismatch` will be hard-coded to `true`.
`String`
`getRelaxedPathChars()`
`String`
`getRelaxedQueryChars()`
`String`
`getRestrictedUserAgents()`
Get the string form of the regular expression that defines the User agents which should be restricted to HTTP/1.0 support.
`protected Pattern`
`getRestrictedUserAgentsPattern()`
`boolean`
`getSecure()`
`String`
`getServer()`
`boolean`
`getServerRemoveAppProvidedValues()`
Should application provider values for the HTTP Server header be removed.
`UpgradeGroupInfo`
`getUpgradeGroupInfo(String upgradeProtocol)`
`UpgradeProtocol`
`getUpgradeProtocol(String upgradedName)`
Find a suitable handler for the protocol upgraded name specified.
`boolean`
`getUseKeepAliveResponseHeader()`
`boolean`
`getUseSendfile()`
`void`
`init()`
Initialise the protocol.
`boolean`
`isSSLEnabled()`
`boolean`
`isTrailerHeaderAllowed(String headerName)`
`void`
`reloadSslHostConfig(String hostName)`
`void`
`reloadSslHostConfigs()`
`void`
`removeAllowedTrailerHeader(String header)`
`void`
`setAllowedTrailerHeaders(String commaSeparatedHeaders)`
`void`
`setAllowHostHeaderMismatch(boolean allowHostHeaderMismatch)`
Deprecated.
This will removed in Tomcat 11 onwards where `allowHostHeaderMismatch` will be hard-coded to `false`.
`void`
`setCompressibleMimeType(String valueS)`
`void`
`setCompression(String compression)`
`void`
`setCompressionMinSize(int compressionMinSize)`
`void`
`setConnectionUploadTimeout(int timeout)`
Set the upload timeout.
`void`
`setContinueResponseTiming(String continueResponseTiming)`
`void`
`setDefaultSSLHostConfigName(String defaultSSLHostConfigName)`
`void`
`setDisableUploadTimeout(boolean isDisabled)`
Set the flag to control whether a separate connection timeout is used during upload of a request body.
`void`
`setMaxExtensionSize(int maxExtensionSize)`
`void`
`setMaxHttpHeaderSize(int valueI)`
`void`
`setMaxHttpRequestHeaderSize(int valueI)`
`void`
`setMaxHttpResponseHeaderSize(int valueI)`
`void`
`setMaxKeepAliveRequests(int mkar)`
Set the maximum number of Keep-Alive requests to allow.
`void`
`setMaxSavePostSize(int maxSavePostSize)`
Set the maximum size of a POST which will be buffered during FORM or CLIENT-CERT authentication.
`void`
`setMaxSwallowSize(int maxSwallowSize)`
`void`
`setMaxTrailerSize(int maxTrailerSize)`
`void`
`setNoCompressionUserAgents(String noCompressionUserAgents)`
`void`
`setRejectIllegalHeader(boolean rejectIllegalHeader)`
Deprecated.
This will removed in Tomcat 11 onwards where `allowHostHeaderMismatch` will be hard-coded to `true`.
`void`
`setRelaxedPathChars(String relaxedPathChars)`
`void`
`setRelaxedQueryChars(String relaxedQueryChars)`
`void`
`setRestrictedUserAgents(String restrictedUserAgents)`
Set restricted user agent list (which will downgrade the connector to HTTP/1.0 mode).
`void`
`setSecure(boolean b)`
`void`
`setServer(String server)`
Set the server header name.
`void`
`setServerRemoveAppProvidedValues(boolean serverRemoveAppProvidedValues)`
`void`
`setSSLEnabled(boolean SSLEnabled)`
`void`
`setUseKeepAliveResponseHeader(boolean useKeepAliveResponseHeader)`
`void`
`setUseSendfile(boolean useSendfile)`
`boolean`
`useCompression(Request request, Response response)`

### Methods inherited from class AbstractProtocol

`addWaitingProcessor, awaitConnectionsClose, closeServerSocketGraceful, getAcceptCount, getAcceptorThreadPriority, getAdapter, getAddress, getClientCertProvider, getConnectionCount, getConnectionLinger, getConnectionTimeout, getDomain, getExecutor, getGlobalRequestProcessorMBeanName, getHandler, getId, getKeepAliveTimeout, getLocalPort, getLog, getMaxConnections, getMaxHeaderCount, getMaxQueueSize, getMaxThreads, getMinSpareThreads, getName, getNameIndex, getNamePrefix, getObjectName, getPort, getPortOffset, getPortWithOffset, getProcessorCache, getProperty, getTcpNoDelay, getThreadPriority, getUtilityExecutor, getWaitingProcessorCount, isPaused, isSendfileSupported, pause, postDeregister, postRegister, preDeregister, preRegister, removeWaitingProcessor, resume, setAcceptCount, setAcceptorThreadPriority, setAdapter, setAddress, setClientCertProvider, setConnectionLinger, setConnectionTimeout, setExecutor, setHandler, setKeepAliveTimeout, setMaxConnections, setMaxHeaderCount, setMaxQueueSize, setMaxThreads, setMinSpareThreads, setPort, setPortOffset, setProcessorCache, setProperty, setTcpNoDelay, setThreadPriority, setUtilityExecutor, start, startAsyncTimeout, stop, stopAsyncTimeout`

### Methods inherited from class Object

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

### Methods inherited from interface ProtocolHandler

`getDesiredBufferSize`

## Field Details

### sm

protected static final StringManager sm

## Constructor Details

### AbstractHttp11Protocol

public AbstractHttp11Protocol(AbstractEndpoint<S,?> endpoint)

## Method Details

### init

public void init() throws Exception
Description copied from interface: `ProtocolHandler`
Initialise the protocol.

Specified by:
  `init` in interface `ProtocolHandler`
Overrides:
  `init` in class `AbstractProtocol<S>`
Throws:
  `Exception` - If the protocol handler fails to initialise

### destroy

public void destroy() throws Exception
Description copied from interface: `ProtocolHandler`
Destroy the protocol (optional).

Specified by:
  `destroy` in interface `ProtocolHandler`
Overrides:
  `destroy` in class `AbstractProtocol<S>`
Throws:
  `Exception` - If the protocol handler fails to destroy

### getProtocolName

protected String getProtocolName()
Description copied from class: `AbstractProtocol`
Obtain the name of the protocol, (Http, Ajp, etc.). Used with JMX.

Specified by:
  `getProtocolName` in class `AbstractProtocol<S>`
Returns:
  the protocol name

### getEndpoint

protected AbstractEndpoint<S,?> getEndpoint()

Over-ridden here to make the method visible to nested classes.

Overrides:
  `getEndpoint` in class `AbstractProtocol<S>`

### getHttpParser

public HttpParser getHttpParser()

### getContinueResponseTiming

public String getContinueResponseTiming()

### setContinueResponseTiming

public void setContinueResponseTiming(String continueResponseTiming)

### getContinueResponseTimingInternal

public ContinueResponseTiming getContinueResponseTimingInternal()

### getUseKeepAliveResponseHeader

public boolean getUseKeepAliveResponseHeader()

### setUseKeepAliveResponseHeader

public void setUseKeepAliveResponseHeader(boolean useKeepAliveResponseHeader)

### getRelaxedPathChars

public String getRelaxedPathChars()

### setRelaxedPathChars

public void setRelaxedPathChars(String relaxedPathChars)

### getRelaxedQueryChars

public String getRelaxedQueryChars()

### setRelaxedQueryChars

public void setRelaxedQueryChars(String relaxedQueryChars)

### getAllowHostHeaderMismatch

@Deprecated public boolean getAllowHostHeaderMismatch()
Deprecated.
This will removed in Tomcat 11 onwards where `allowHostHeaderMismatch` will be hard-coded to `false`.
Will Tomcat accept an HTTP 1.1 request where the host header does not agree with the host specified (if any) in the request line?

Returns:
  `true` if Tomcat will allow such requests, otherwise `false`

### setAllowHostHeaderMismatch

@Deprecated public void setAllowHostHeaderMismatch(boolean allowHostHeaderMismatch)
Deprecated.
This will removed in Tomcat 11 onwards where `allowHostHeaderMismatch` will be hard-coded to `false`.
Will Tomcat accept an HTTP 1.1 request where the host header does not agree with the host specified (if any) in the request line?

Parameters:
  `allowHostHeaderMismatch` - `true` to allow such requests, `false` to reject them with a 400

### getRejectIllegalHeader

@Deprecated public boolean getRejectIllegalHeader()
Deprecated.
This will removed in Tomcat 11 onwards where `allowHostHeaderMismatch` will be hard-coded to `true`.
If an HTTP request is received that contains an illegal header name or value (e.g. the header name is not a token) will the request be rejected (with a 400 response) or will the illegal header be ignored?

Returns:
  `true` if the request will be rejected or `false` if the header will be ignored

### setRejectIllegalHeader

@Deprecated public void setRejectIllegalHeader(boolean rejectIllegalHeader)
Deprecated.
This will removed in Tomcat 11 onwards where `allowHostHeaderMismatch` will be hard-coded to `true`.
If an HTTP request is received that contains an illegal header name or value (e.g. the header name is not a token) should the request be rejected (with a 400 response) or should the illegal header be ignored?

Parameters:
  `rejectIllegalHeader` - `true` to reject requests with illegal header names or values, `false` to ignore the header

### getMaxSavePostSize

public int getMaxSavePostSize()
Return the maximum size of the post which will be saved during FORM or CLIENT-CERT authentication.

Returns:
  The size in bytes

### setMaxSavePostSize

public void setMaxSavePostSize(int maxSavePostSize)
Set the maximum size of a POST which will be buffered during FORM or CLIENT-CERT authentication. When a POST is received where the security constraints require a client certificate, the POST body needs to be buffered while an SSL handshake takes place to obtain the certificate. A similar buffering is required during FORM auth.

Parameters:
  `maxSavePostSize` - The maximum size POST body to buffer in bytes

### getMaxHttpHeaderSize

public int getMaxHttpHeaderSize()

### setMaxHttpHeaderSize

public void setMaxHttpHeaderSize(int valueI)

### getMaxHttpRequestHeaderSize

public int getMaxHttpRequestHeaderSize()

### setMaxHttpRequestHeaderSize

public void setMaxHttpRequestHeaderSize(int valueI)

### getMaxHttpResponseHeaderSize

public int getMaxHttpResponseHeaderSize()

### setMaxHttpResponseHeaderSize

public void setMaxHttpResponseHeaderSize(int valueI)

### getConnectionUploadTimeout

public int getConnectionUploadTimeout()
Specifies a different (usually longer) connection timeout during data upload. Default is 5 minutes as in Apache HTTPD server.

Returns:
  The timeout in milliseconds

### setConnectionUploadTimeout

public void setConnectionUploadTimeout(int timeout)
Set the upload timeout.

Parameters:
  `timeout` - Upload timeout in milliseconds

### getDisableUploadTimeout

public boolean getDisableUploadTimeout()
Get the flag that controls upload time-outs. If true, the connectionUploadTimeout will be ignored and the regular socket timeout will be used for the full duration of the connection.

Returns:
  `true` if the separate upload timeout is disabled

### setDisableUploadTimeout

public void setDisableUploadTimeout(boolean isDisabled)
Set the flag to control whether a separate connection timeout is used during upload of a request body.

Parameters:
  `isDisabled` - `true` if the separate upload timeout should be disabled

### setCompression

public void setCompression(String compression)

### getCompression

public String getCompression()

### getCompressionLevel

protected int getCompressionLevel()

### getNoCompressionUserAgents

public String getNoCompressionUserAgents()

### getNoCompressionUserAgentsPattern

protected Pattern getNoCompressionUserAgentsPattern()

### setNoCompressionUserAgents

public void setNoCompressionUserAgents(String noCompressionUserAgents)

### getCompressibleMimeType

public String getCompressibleMimeType()

### setCompressibleMimeType

public void setCompressibleMimeType(String valueS)

### getCompressibleMimeTypes

public String[] getCompressibleMimeTypes()

### getCompressionMinSize

public int getCompressionMinSize()

### setCompressionMinSize

public void setCompressionMinSize(int compressionMinSize)

### useCompression

public boolean useCompression(Request request, Response response)

### getRestrictedUserAgents

public String getRestrictedUserAgents()
Get the string form of the regular expression that defines the User agents which should be restricted to HTTP/1.0 support.

Returns:
  The regular expression as a String

### getRestrictedUserAgentsPattern

protected Pattern getRestrictedUserAgentsPattern()

### setRestrictedUserAgents

public void setRestrictedUserAgents(String restrictedUserAgents)
Set restricted user agent list (which will downgrade the connector to HTTP/1.0 mode). Regular expression as supported by `Pattern`.

Parameters:
  `restrictedUserAgents` - The regular expression as supported by `Pattern` for the user agents e.g. "gorilla|desesplorer|tigrus"

### getServer

public String getServer()

### setServer

public void setServer(String server)
Set the server header name.

Parameters:
  `server` - The new value to use for the server header

### getServerRemoveAppProvidedValues

public boolean getServerRemoveAppProvidedValues()
Should application provider values for the HTTP Server header be removed. Note that if `server` is set, any application provided value will be over-ridden.

Returns:
  `true` if application provided values should be removed, otherwise `false`

### setServerRemoveAppProvidedValues

public void setServerRemoveAppProvidedValues(boolean serverRemoveAppProvidedValues)

### getMaxTrailerSize

public int getMaxTrailerSize()

### setMaxTrailerSize

public void setMaxTrailerSize(int maxTrailerSize)

### getMaxExtensionSize

public int getMaxExtensionSize()

### setMaxExtensionSize

public void setMaxExtensionSize(int maxExtensionSize)

### getMaxSwallowSize

public int getMaxSwallowSize()

### setMaxSwallowSize

public void setMaxSwallowSize(int maxSwallowSize)

### getSecure

public boolean getSecure()

### setSecure

public void setSecure(boolean b)

### setAllowedTrailerHeaders

public void setAllowedTrailerHeaders(String commaSeparatedHeaders)

### getAllowedTrailerHeadersInternal

protected Set<String> getAllowedTrailerHeadersInternal()

### isTrailerHeaderAllowed

public boolean isTrailerHeaderAllowed(String headerName)

### getAllowedTrailerHeaders

public String getAllowedTrailerHeaders()

### addAllowedTrailerHeader

public void addAllowedTrailerHeader(String header)

### removeAllowedTrailerHeader

public void removeAllowedTrailerHeader(String header)

### addUpgradeProtocol

public void addUpgradeProtocol(UpgradeProtocol upgradeProtocol)
Description copied from interface: `ProtocolHandler`
Add a new protocol for used by HTTP/1.1 upgrade or ALPN.

Parameters:
  `upgradeProtocol` - the protocol

### findUpgradeProtocols

public UpgradeProtocol[] findUpgradeProtocols()
Description copied from interface: `ProtocolHandler`
Return all configured upgrade protocols.

Returns:
  the protocols

### getNegotiatedProtocol

public UpgradeProtocol getNegotiatedProtocol(String negotiatedName)
Description copied from class: `AbstractProtocol`
Find a suitable handler for the protocol negotiated at the network layer.

Specified by:
  `getNegotiatedProtocol` in class `AbstractProtocol<S>`
Parameters:
  `negotiatedName` - The name of the requested negotiated protocol.
Returns:
  The instance where `UpgradeProtocol.getAlpnName()` matches the requested protocol

### getUpgradeProtocol

public UpgradeProtocol getUpgradeProtocol(String upgradedName)
Description copied from class: `AbstractProtocol`
Find a suitable handler for the protocol upgraded name specified. This is used for direct connection protocol selection.

Specified by:
  `getUpgradeProtocol` in class `AbstractProtocol<S>`
Parameters:
  `upgradedName` - The name of the requested negotiated protocol.
Returns:
  The instance where `UpgradeProtocol.getAlpnName()` matches the requested protocol

### getUpgradeGroupInfo

public UpgradeGroupInfo getUpgradeGroupInfo(String upgradeProtocol)

### getONameForUpgrade

public ObjectName getONameForUpgrade(String upgradeProtocol)

### isSSLEnabled

public boolean isSSLEnabled()

### setSSLEnabled

public void setSSLEnabled(boolean SSLEnabled)

### getUseSendfile

public boolean getUseSendfile()

### setUseSendfile

public void setUseSendfile(boolean useSendfile)

### getMaxKeepAliveRequests

public int getMaxKeepAliveRequests()

Returns:
  The maximum number of requests which can be performed over a keep-alive connection. The default is the same as for Apache HTTP Server (100).

### setMaxKeepAliveRequests

public void setMaxKeepAliveRequests(int mkar)
Set the maximum number of Keep-Alive requests to allow. This is to safeguard from DoS attacks. Setting to a negative value disables the limit.

Parameters:
  `mkar` - The new maximum number of Keep-Alive requests allowed

### getDefaultSSLHostConfigName

public String getDefaultSSLHostConfigName()

### setDefaultSSLHostConfigName

public void setDefaultSSLHostConfigName(String defaultSSLHostConfigName)

### addSslHostConfig

public void addSslHostConfig(SSLHostConfig sslHostConfig)
Description copied from interface: `ProtocolHandler`
Add a new SSL configuration for a virtual host.

Parameters:
  `sslHostConfig` - the configuration

### addSslHostConfig

public void addSslHostConfig(SSLHostConfig sslHostConfig, boolean replace)
Description copied from interface: `ProtocolHandler`
Add a new SSL configuration for a virtual host.

Parameters:
  `sslHostConfig` - the configuration
  `replace` - If `true` replacement of an existing configuration is permitted, otherwise any such attempted replacement will trigger an exception

### findSslHostConfigs

public SSLHostConfig[] findSslHostConfigs()
Description copied from interface: `ProtocolHandler`
Find all configured SSL virtual host configurations which will be used by SNI.

Returns:
  the configurations

### reloadSslHostConfigs

public void reloadSslHostConfigs()

### reloadSslHostConfig

public void reloadSslHostConfig(String hostName)

### checkSni

public boolean checkSni(String sniHostName, String protocolHostName)

### createProcessor

protected Processor createProcessor()
Description copied from class: `AbstractProtocol`
Create and configure a new Processor instance for the current protocol implementation.

Specified by:
  `createProcessor` in class `AbstractProtocol<S>`
Returns:
  A fully configured Processor instance that is ready to use

### createUpgradeProcessor

protected Processor createUpgradeProcessor(SocketWrapperBase<?> socket, UpgradeToken upgradeToken)

Specified by:
  `createUpgradeProcessor` in class `AbstractProtocol<S>`