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:
AbstractHttp11JsseProtocol

public abstract class AbstractHttp11Protocol<S> extends AbstractProtocol<S>
Base implementation of the HTTP/1.1 and HTTP/1.0 protocols.
  • 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
    • 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()
      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
    • 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