# Class AbstractHttp11Protocol<S>

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

Type Parameters:
  `S` - The socket type

All Implemented Interfaces:
  `MBeanRegistration, ProtocolHandler`

Direct Known Subclasses:
  `Http11Nio2Protocol, Http11NioProtocol`

public abstract class AbstractHttp11Protocol<S> extends AbstractProtocol<S>
Base implementation of the HTTP/1.1 and HTTP/1.0 protocols.

- ## 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`
  The StringManager for this package.

  ### Fields inherited from class AbstractProtocol

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

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `AbstractHttp11Protocol(AbstractEndpoint<S,?> endpoint)`
  Construct a specific instance of this protocol handler.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addAllowedTrailerHeader(String header)`
  Add a header name to the set of allowed trailer headers.
  `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)`
  Check the SNI hostname.
  `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()`
  Get the list of allowed trailer headers as a comma-separated string.
  `protected Set<String>`
  `getAllowedTrailerHeadersInternal()`
  Get the set of allowed trailer header names.
  `String`
  `getCompressibleMimeType()`
  Get the MIME types that may be subject to compression.
  `String[]`
  `getCompressibleMimeTypes()`
  Get the MIME types that may be subject to compression as an array.
  `String`
  `getCompression()`
  Get the compression setting.
  `protected int`
  `getCompressionLevel()`
  Get the compression level.
  `int`
  `getCompressionMinSize()`
  Get the minimum response size for compression to be applied.
  `int`
  `getConnectionUploadTimeout()`
  Specifies a different (usually longer) connection timeout during data upload.
  `String`
  `getContinueResponseTiming()`
  Get the setting for how responses to 100-Continue requests will be sent.
  `ContinueResponseTiming`
  `getContinueResponseTimingInternal()`
  Get the continue response timing setting as an enum value.
  `String`
  `getDefaultSSLHostConfigName()`
  Get the default SSL host configuration name.
  `boolean`
  `getDisableUploadTimeout()`
  Get the flag that controls upload time-outs.
  `protected AbstractEndpoint<S,?>`
  `getEndpoint()`
  Gets the endpoint.
  `HttpParser`
  `getHttpParser()`
  Get the HttpParser used to parse relaxed characters.
  `int`
  `getMaxExtensionSize()`
  Get the maximum size of extension information in chunked encoding.
  `int`
  `getMaxHttpHeaderSize()`
  Get the maximum size of the HTTP message header.
  `int`
  `getMaxHttpRequestHeaderSize()`
  Get the maximum size of the HTTP request message header.
  `int`
  `getMaxHttpResponseHeaderSize()`
  Get the maximum size of the HTTP response message header.
  `int`
  `getMaxKeepAliveRequests()`
  Get the maximum number of requests which can be performed over a keep-alive connection.
  `int`
  `getMaxSavePostSize()`
  Return the maximum size of the post which will be saved during FORM or CLIENT-CERT authentication.
  `int`
  `getMaxSwallowSize()`
  Get the maximum amount of request body to swallow.
  `int`
  `getMaxTrailerSize()`
  Get the maximum size of trailing headers.
  `UpgradeProtocol`
  `getNegotiatedProtocol(String negotiatedName)`
  Find a suitable handler for the protocol negotiated at the network layer.
  `String`
  `getNoCompressionEncodings()`
  Get the content encodings that should not be used.
  `String`
  `getNoCompressionUserAgents()`
  Get the list of user agents that should not use compression.
  `protected Pattern`
  `getNoCompressionUserAgentsPattern()`
  Get the pattern of user agents that should not use compression.
  `ObjectName`
  `getONameForUpgrade(String upgradeProtocol)`
  Get the ObjectName for the MBean of the specified upgrade protocol.
  `protected String`
  `getProtocolName()`
  Obtain the name of the protocol, (Http, Ajp, etc.).
  `String`
  `getRelaxedPathChars()`
  Get the set of characters allowed in a URL path.
  `String`
  `getRelaxedQueryChars()`
  Get the set of characters allowed in a URL query string.
  `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()`
  Get the pattern of user agents that should be restricted to HTTP/1.0.
  `boolean`
  `getSecure()`
  Get the flag indicating if this protocol is treated as secure.
  `String`
  `getServer()`
  Get the value of the Server response header.
  `boolean`
  `getServerRemoveAppProvidedValues()`
  Should application provider values for the HTTP Server header be removed.
  `int`
  `getSniParseLimit()`
  Get the SNI parse limit.
  `String`
  `getSslImplementationName()`
  Get the name of the SSL implementation.
  `protected String`
  `getSslImplementationShortName()`
  Get the short name of the SSL implementation.
  `UpgradeGroupInfo`
  `getUpgradeGroupInfo(String upgradeProtocol)`
  Get the upgrade group info for the specified upgrade protocol.
  `UpgradeProtocol`
  `getUpgradeProtocol(String upgradedName)`
  Find a suitable handler for the protocol upgraded name specified.
  `boolean`
  `getUseKeepAliveResponseHeader()`
  Get the flag that controls whether the Keep-Alive response header will be used.
  `boolean`
  `getUseSendfile()`
  Check if sendfile is enabled for this connector.
  `void`
  `init()`
  Initializes the protocol handler.
  `boolean`
  `isSSLEnabled()`
  Check if SSL is enabled on this connector.
  `boolean`
  `isTrailerHeaderAllowed(String headerName)`
  Check if a header name is in the set of allowed trailer headers.
  `void`
  `reloadSslHostConfig(String hostName)`
  Reload the SSL host configuration for the specified host.
  `void`
  `reloadSslHostConfigs()`
  Reload all SSL host configurations.
  `void`
  `removeAllowedTrailerHeader(String header)`
  Remove a header name from the set of allowed trailer headers.
  `void`
  `setAllowedTrailerHeaders(String commaSeparatedHeaders)`
  Set the names of headers that are allowed to be sent via a trailer when using chunked encoding.
  `void`
  `setCompressibleMimeType(String valueS)`
  Set the MIME types that may be subject to compression.
  `void`
  `setCompression(String compression)`
  Set the compression setting.
  `void`
  `setCompressionMinSize(int compressionMinSize)`
  Set the minimum response size for compression to be applied.
  `void`
  `setConnectionUploadTimeout(int timeout)`
  Set the upload timeout.
  `void`
  `setContinueResponseTiming(String continueResponseTiming)`
  Set the setting for how responses to 100-Continue requests will be sent.
  `void`
  `setDefaultSSLHostConfigName(String defaultSSLHostConfigName)`
  Set the default SSL host configuration name.
  `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)`
  Set the maximum size of extension information in chunked encoding.
  `void`
  `setMaxHttpHeaderSize(int valueI)`
  Set the maximum size of the HTTP message header.
  `void`
  `setMaxHttpRequestHeaderSize(int valueI)`
  Set the maximum size of the HTTP request message header.
  `void`
  `setMaxHttpResponseHeaderSize(int valueI)`
  Set the maximum size of the HTTP response message header.
  `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)`
  Set the maximum amount of request body to swallow.
  `void`
  `setMaxTrailerSize(int maxTrailerSize)`
  Set the maximum size of trailing headers.
  `void`
  `setNoCompressionEncodings(String encodings)`
  Set the content encodings that should not be used.
  `void`
  `setNoCompressionUserAgents(String noCompressionUserAgents)`
  Set the list of user agents that should not use compression.
  `void`
  `setRelaxedPathChars(String relaxedPathChars)`
  Set the set of characters allowed in a URL path.
  `void`
  `setRelaxedQueryChars(String relaxedQueryChars)`
  Set the set of characters allowed in a URL query string.
  `void`
  `setRestrictedUserAgents(String restrictedUserAgents)`
  Set restricted user agent list (which will downgrade the connector to HTTP/1.0 mode).
  `void`
  `setSecure(boolean b)`
  Set the flag indicating if this protocol is treated as secure.
  `void`
  `setServer(String server)`
  Set the server header name.
  `void`
  `setServerRemoveAppProvidedValues(boolean serverRemoveAppProvidedValues)`
  Set whether application provider values for the HTTP Server header should be removed.
  `void`
  `setSniParseLimit(int sniParseLimit)`
  Set the SNI parse limit.
  `void`
  `setSSLEnabled(boolean SSLEnabled)`
  Set whether SSL is enabled on this connector.
  `void`
  `setSslImplementationName(String s)`
  Set the name of the SSL implementation.
  `void`
  `setUseKeepAliveResponseHeader(boolean useKeepAliveResponseHeader)`
  Set the flag that controls whether the Keep-Alive response header will be used.
  `void`
  `setUseSendfile(boolean useSendfile)`
  Set whether sendfile is enabled for this connector.
  `boolean`
  `useCompression(Request request, Response response)`
  Check if compression should be used for the specified request/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
    The StringManager for this package.

- ## Constructor Details

  - ### AbstractHttp11Protocol

    public AbstractHttp11Protocol(AbstractEndpoint<S,?> endpoint)
    Construct a specific instance of this protocol handler.
    Parameters:
      `endpoint` - Endpoint on which to accept connections

- ## 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()
    Get the HttpParser used to parse relaxed characters.
    Returns:
      the HttpParser

  - ### getContinueResponseTiming

    public String getContinueResponseTiming()
    Get the setting for how responses to 100-Continue requests will be sent.
    Returns:
      The current continue response timing setting

  - ### setContinueResponseTiming

    public void setContinueResponseTiming(String continueResponseTiming)
    Set the setting for how responses to 100-Continue requests will be sent.
    Parameters:
      `continueResponseTiming` - The new continue response timing setting

  - ### getContinueResponseTimingInternal

    public ContinueResponseTiming getContinueResponseTimingInternal()
    Get the continue response timing setting as an enum value.
    Returns:
      The continue response timing

  - ### getUseKeepAliveResponseHeader

    public boolean getUseKeepAliveResponseHeader()
    Get the flag that controls whether the Keep-Alive response header will be used.
    Returns:
      `true` if the Keep-Alive response header will be used

  - ### setUseKeepAliveResponseHeader

    public void setUseKeepAliveResponseHeader(boolean useKeepAliveResponseHeader)
    Set the flag that controls whether the Keep-Alive response header will be used.
    Parameters:
      `useKeepAliveResponseHeader` - `true` if the Keep-Alive response header should be used

  - ### getRelaxedPathChars

    public String getRelaxedPathChars()
    Get the set of characters allowed in a URL path.
    Returns:
      The allowed path characters

  - ### setRelaxedPathChars

    public void setRelaxedPathChars(String relaxedPathChars)
    Set the set of characters allowed in a URL path.
    Parameters:
      `relaxedPathChars` - The allowed path characters

  - ### getRelaxedQueryChars

    public String getRelaxedQueryChars()
    Get the set of characters allowed in a URL query string.
    Returns:
      The allowed query characters

  - ### setRelaxedQueryChars

    public void setRelaxedQueryChars(String relaxedQueryChars)
    Set the set of characters allowed in a URL query string.
    Parameters:
      `relaxedQueryChars` - The allowed query characters

  - ### 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()
    Get the maximum size of the HTTP message header.
    Returns:
      The maximum size of the HTTP message header in bytes

  - ### setMaxHttpHeaderSize

    public void setMaxHttpHeaderSize(int valueI)
    Set the maximum size of the HTTP message header.
    Parameters:
      `valueI` - The maximum size of the HTTP message header in bytes

  - ### getMaxHttpRequestHeaderSize

    public int getMaxHttpRequestHeaderSize()
    Get the maximum size of the HTTP request message header.
    Returns:
      The maximum size of the HTTP request message header in bytes

  - ### setMaxHttpRequestHeaderSize

    public void setMaxHttpRequestHeaderSize(int valueI)
    Set the maximum size of the HTTP request message header.
    Parameters:
      `valueI` - The maximum size of the HTTP request message header in bytes

  - ### getMaxHttpResponseHeaderSize

    public int getMaxHttpResponseHeaderSize()
    Get the maximum size of the HTTP response message header.
    Returns:
      The maximum size of the HTTP response message header in bytes

  - ### setMaxHttpResponseHeaderSize

    public void setMaxHttpResponseHeaderSize(int valueI)
    Set the maximum size of the HTTP response message header.
    Parameters:
      `valueI` - The maximum size of the HTTP response message header in bytes

  - ### 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)
    Set the compression setting.
    Parameters:
      `compression` - The compression setting

  - ### getCompression

    public String getCompression()
    Get the compression setting.
    Returns:
      The compression setting

  - ### getCompressionLevel

    protected int getCompressionLevel()
    Get the compression level.
    Returns:
      The compression level

  - ### getNoCompressionUserAgents

    public String getNoCompressionUserAgents()
    Get the list of user agents that should not use compression.
    Returns:
      The user agents that should not use compression

  - ### getNoCompressionUserAgentsPattern

    protected Pattern getNoCompressionUserAgentsPattern()
    Get the pattern of user agents that should not use compression.
    Returns:
      The pattern of user agents that should not use compression

  - ### setNoCompressionUserAgents

    public void setNoCompressionUserAgents(String noCompressionUserAgents)
    Set the list of user agents that should not use compression.
    Parameters:
      `noCompressionUserAgents` - The user agents that should not use compression

  - ### getCompressibleMimeType

    public String getCompressibleMimeType()
    Get the MIME types that may be subject to compression.
    Returns:
      The MIME types that may be subject to compression

  - ### setCompressibleMimeType

    public void setCompressibleMimeType(String valueS)
    Set the MIME types that may be subject to compression.
    Parameters:
      `valueS` - The MIME types that may be subject to compression

  - ### getCompressibleMimeTypes

    public String[] getCompressibleMimeTypes()
    Get the MIME types that may be subject to compression as an array.
    Returns:
      The MIME types that may be subject to compression

  - ### getCompressionMinSize

    public int getCompressionMinSize()
    Get the minimum response size for compression to be applied.
    Returns:
      The minimum response size in bytes

  - ### setCompressionMinSize

    public void setCompressionMinSize(int compressionMinSize)
    Set the minimum response size for compression to be applied.
    Parameters:
      `compressionMinSize` - The minimum response size in bytes

  - ### getNoCompressionEncodings

    public String getNoCompressionEncodings()
    Get the content encodings that should not be used.
    Returns:
      The content encodings that should not be used

  - ### setNoCompressionEncodings

    public void setNoCompressionEncodings(String encodings)
    Set the content encodings that should not be used.
    Parameters:
      `encodings` - The content encodings that should not be used

  - ### useCompression

    public boolean useCompression(Request request, Response response)
    Check if compression should be used for the specified request/response.
    Parameters:
      `request` - The HTTP request
      `response` - The HTTP response
    Returns:
      `true` if compression should be used

  - ### 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()
    Get the pattern of user agents that should be restricted to HTTP/1.0.
    Returns:
      The pattern of user agents that should be restricted to HTTP/1.0

  - ### 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()
    Get the value of the Server response header.
    Returns:
      The value of the Server response header

  - ### 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)
    Set whether application provider values for the HTTP Server header should be removed.
    Parameters:
      `serverRemoveAppProvidedValues` - `true` if application provided values should be removed

  - ### getMaxTrailerSize

    public int getMaxTrailerSize()
    Get the maximum size of trailing headers.
    Returns:
      The maximum size of trailing headers in bytes

  - ### setMaxTrailerSize

    public void setMaxTrailerSize(int maxTrailerSize)
    Set the maximum size of trailing headers.
    Parameters:
      `maxTrailerSize` - The maximum size of trailing headers in bytes

  - ### getMaxExtensionSize

    public int getMaxExtensionSize()
    Get the maximum size of extension information in chunked encoding.
    Returns:
      The maximum size of extension information in bytes

  - ### setMaxExtensionSize

    public void setMaxExtensionSize(int maxExtensionSize)
    Set the maximum size of extension information in chunked encoding.
    Parameters:
      `maxExtensionSize` - The maximum size of extension information in bytes

  - ### getMaxSwallowSize

    public int getMaxSwallowSize()
    Get the maximum amount of request body to swallow.
    Returns:
      The maximum amount of request body to swallow in bytes

  - ### setMaxSwallowSize

    public void setMaxSwallowSize(int maxSwallowSize)
    Set the maximum amount of request body to swallow.
    Parameters:
      `maxSwallowSize` - The maximum amount of request body to swallow in bytes

  - ### getSecure

    public boolean getSecure()
    Get the flag indicating if this protocol is treated as secure.
    Returns:
      `true` if this protocol is treated as secure

  - ### setSecure

    public void setSecure(boolean b)
    Set the flag indicating if this protocol is treated as secure.
    Parameters:
      `b` - `true` if this protocol is treated as secure

  - ### setAllowedTrailerHeaders

    public void setAllowedTrailerHeaders(String commaSeparatedHeaders)
    Set the names of headers that are allowed to be sent via a trailer when using chunked encoding.
    Parameters:
      `commaSeparatedHeaders` - Comma separated list of header names

  - ### getAllowedTrailerHeadersInternal

    protected Set<String> getAllowedTrailerHeadersInternal()
    Get the set of allowed trailer header names.
    Returns:
      The set of allowed trailer header names

  - ### isTrailerHeaderAllowed

    public boolean isTrailerHeaderAllowed(String headerName)
    Check if a header name is in the set of allowed trailer headers.
    Parameters:
      `headerName` - The header name to check
    Returns:
      `true` if the header is allowed as a trailer header

  - ### getAllowedTrailerHeaders

    public String getAllowedTrailerHeaders()
    Get the list of allowed trailer headers as a comma-separated string.
    Returns:
      The allowed trailer headers as a comma-separated string

  - ### addAllowedTrailerHeader

    public void addAllowedTrailerHeader(String header)
    Add a header name to the set of allowed trailer headers.
    Parameters:
      `header` - The header name to add

  - ### removeAllowedTrailerHeader

    public void removeAllowedTrailerHeader(String header)
    Remove a header name from the set of allowed trailer headers.
    Parameters:
      `header` - The header name to remove

  - ### 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)
    Get the upgrade group info for the specified upgrade protocol.
    Parameters:
      `upgradeProtocol` - The upgrade protocol name
    Returns:
      The upgrade group info for the specified protocol

  - ### getONameForUpgrade

    public ObjectName getONameForUpgrade(String upgradeProtocol)
    Get the ObjectName for the MBean of the specified upgrade protocol.
    Parameters:
      `upgradeProtocol` - The upgrade protocol name
    Returns:
      The ObjectName for the upgrade protocol MBean, or `null`

  - ### isSSLEnabled

    public boolean isSSLEnabled()
    Check if SSL is enabled on this connector.
    Returns:
      `true` if SSL is enabled

  - ### setSSLEnabled

    public void setSSLEnabled(boolean SSLEnabled)
    Set whether SSL is enabled on this connector.
    Parameters:
      `SSLEnabled` - `true` if SSL is enabled

  - ### getUseSendfile

    public boolean getUseSendfile()
    Check if sendfile is enabled for this connector.
    Returns:
      `true` if sendfile is enabled

  - ### setUseSendfile

    public void setUseSendfile(boolean useSendfile)
    Set whether sendfile is enabled for this connector.
    Parameters:
      `useSendfile` - `true` if sendfile is enabled

  - ### getMaxKeepAliveRequests

    public int getMaxKeepAliveRequests()
    Get 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).
    Returns:
      The maximum number of requests which can be performed over a keep-alive connection

  - ### 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()
    Get the default SSL host configuration name.
    Returns:
      The default SSL host configuration name

  - ### setDefaultSSLHostConfigName

    public void setDefaultSSLHostConfigName(String defaultSSLHostConfigName)
    Set the default SSL host configuration name.
    Parameters:
      `defaultSSLHostConfigName` - The default SSL host configuration name

  - ### 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()
    Reload all SSL host configurations.

  - ### reloadSslHostConfig

    public void reloadSslHostConfig(String hostName)
    Reload the SSL host configuration for the specified host.
    Parameters:
      `hostName` - The host name to reload

  - ### getSslImplementationShortName

    protected String getSslImplementationShortName()
    Get the short name of the SSL implementation.
    Returns:
      The short name of the SSL implementation

  - ### getSslImplementationName

    public String getSslImplementationName()
    Get the name of the SSL implementation.
    Returns:
      The name of the SSL implementation

  - ### setSslImplementationName

    public void setSslImplementationName(String s)
    Set the name of the SSL implementation.
    Parameters:
      `s` - The name of the SSL implementation

  - ### getSniParseLimit

    public int getSniParseLimit()
    Get the SNI parse limit.
    Returns:
      The SNI parse limit

  - ### setSniParseLimit

    public void setSniParseLimit(int sniParseLimit)
    Set the SNI parse limit.
    Parameters:
      `sniParseLimit` - The SNI parse limit

  - ### checkSni

    public boolean checkSni(String sniHostName, String protocolHostName)
    Check the SNI hostname.
    Parameters:
      `sniHostName` - The SNI hostname
      `protocolHostName` - The protocol hostname
    Returns:
      `true` if the SNI check passes

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