AbstractHttp11Protocol (Apache Tomcat 11.0.22 API Documentation)
Description: declaration: package: org.apache.coyote.http11, class: AbstractHttp11Protocol

# 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:
  `Http11Nio2Protocol, Http11NioProtocol`

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)`
  Create and configure a new Processor instance for upgrade connections.
  `void`
  `destroy()`
  Destroys the protocol handler.
  `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()`
  `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()`
  Gets the endpoint.
  `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`
  `getNoCompressionEncodings()`
  `String`
  `getNoCompressionUserAgents()`
  `protected Pattern`
  `getNoCompressionUserAgentsPattern()`
  `ObjectName`
  `getONameForUpgrade(String upgradeProtocol)`
  `protected String`
  `getProtocolName()`
  Obtain the name of the protocol, (Http, Ajp, etc.).
  `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.
  `int`
  `getSniParseLimit()`
  `String`
  `getSslImplementationName()`
  `protected String`
  `getSslImplementationShortName()`
  `UpgradeGroupInfo`
  `getUpgradeGroupInfo(String upgradeProtocol)`
  `UpgradeProtocol`
  `getUpgradeProtocol(String upgradedName)`
  Find a suitable handler for the protocol upgraded name specified.
  `boolean`
  `getUseKeepAliveResponseHeader()`
  `boolean`
  `getUseSendfile()`
  `void`
  `init()`
  Initializes the protocol handler.
  `boolean`
  `isSSLEnabled()`
  `boolean`
  `isTrailerHeaderAllowed(String headerName)`
  `void`
  `reloadSslHostConfig(String hostName)`
  `void`
  `reloadSslHostConfigs()`
  `void`
  `removeAllowedTrailerHeader(String header)`
  `void`
  `setAllowedTrailerHeaders(String commaSeparatedHeaders)`
  `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`
  `setNoCompressionEncodings(String encodings)`
  `void`
  `setNoCompressionUserAgents(String noCompressionUserAgents)`
  `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`
  `setSniParseLimit(int sniParseLimit)`
  `void`
  `setSSLEnabled(boolean SSLEnabled)`
  `void`
  `setSslImplementationName(String s)`
  `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 class: `AbstractProtocol`
    Initializes the protocol handler.
    Specified by:
      `init` in interface `ProtocolHandler`
    Overrides:
      `init` in class `AbstractProtocol<S>`
    Throws:
      `Exception` - if initialization fails

  - ### destroy

    public void destroy() throws Exception
    Description copied from class: `AbstractProtocol`
    Destroys the protocol handler.
    Specified by:
      `destroy` in interface `ProtocolHandler`
    Overrides:
      `destroy` in class `AbstractProtocol<S>`
    Throws:
      `Exception` - if destroy fails

  - ### 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()
    Gets the endpoint.

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

    Overrides:
      `getEndpoint` in class `AbstractProtocol<S>`
    Returns:
      the endpoint

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

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

  - ### getNoCompressionEncodings

    public String getNoCompressionEncodings()

  - ### setNoCompressionEncodings

    public void setNoCompressionEncodings(String encodings)

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

  - ### getSslImplementationShortName

    protected String getSslImplementationShortName()

  - ### getSslImplementationName

    public String getSslImplementationName()

  - ### setSslImplementationName

    public void setSslImplementationName(String s)

  - ### getSniParseLimit

    public int getSniParseLimit()

  - ### setSniParseLimit

    public void setSniParseLimit(int sniParseLimit)

  - ### 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)
    Description copied from class: `AbstractProtocol`
    Create and configure a new Processor instance for upgrade connections.
    Specified by:
      `createUpgradeProcessor` in class `AbstractProtocol<S>`
    Parameters:
      `socket` - The socket for the upgrade connection
      `upgradeToken` - The upgrade token containing upgrade information
    Returns:
      A fully configured Processor instance that is ready to use