Package org.apache.coyote.http11

## 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 org.apache.coyote.AbstractProtocol

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

### Field Summary

Fields
`protected static StringManager` `sm`

### Fields inherited from class org.apache.coyote.AbstractProtocol

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

### Constructor Summary

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

### Method Summary

All Methods Instance Methods Concrete Methods Deprecated Methods
`void` `addAllowedTrailerHeader​(String header)`
`void` `addSslHostConfig​(SSLHostConfig sslHostConfig)` 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.
`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()`
`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 org.apache.coyote.AbstractProtocol

`addWaitingProcessor, awaitConnectionsClose, closeServerSocketGraceful, getAcceptCount, getAcceptorThreadPriority, getAdapter, getAddress, getClientCertProvider, getConnectionCount, getConnectionLinger, getConnectionTimeout, getDomain, getExecutor, getGlobalRequestProcessorMBeanName, getHandler, getId, getKeepAliveTimeout, getLocalPort, getLog, getMaxConnections, getMaxHeaderCount, 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, setMaxThreads, setMinSpareThreads, setPort, setPortOffset, setProcessorCache, setProperty, setTcpNoDelay, setThreadPriority, setUtilityExecutor, start, startAsyncTimeout, stop, stopAsyncTimeout`

### Methods inherited from class java.lang.Object

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

### Methods inherited from interface org.apache.coyote.ProtocolHandler

`getDesiredBufferSize`

### Field Detail

#### sm

    protected static final StringManager sm

### Constructor Detail

#### AbstractHttp11Protocol

    public AbstractHttp11Protocol​(AbstractEndpoint<S,​?> endpoint)

### Method Detail

#### 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>`

#### 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

#### 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)

#### 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>`