Class AbstractHttp11Protocol<S>

  • Type Parameters:
    S - The socket type
    All Implemented Interfaces:
    javax.management.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 Detail

      • sm

        protected static final StringManager sm
        The StringManager for this package.
    • Constructor Detail

      • AbstractHttp11Protocol

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

      • init

        public void init()
                  throws java.lang.Exception
        Description copied from class: AbstractProtocol
        Initializes the protocol handler.
        Specified by:
        init in interface ProtocolHandler
        Overrides:
        init in class AbstractProtocol<S>
        Throws:
        java.lang.Exception - if initialization fails
      • getProtocolName

        protected java.lang.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
      • getHttpParser

        public HttpParser getHttpParser()
        Get the HttpParser used to parse relaxed characters.
        Returns:
        the HttpParser
      • getContinueResponseTiming

        public java.lang.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​(java.lang.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 java.lang.String getRelaxedPathChars()
        Get the set of characters allowed in a URL path.
        Returns:
        The allowed path characters
      • setRelaxedPathChars

        public void setRelaxedPathChars​(java.lang.String relaxedPathChars)
        Set the set of characters allowed in a URL path.
        Parameters:
        relaxedPathChars - The allowed path characters
      • getRelaxedQueryChars

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

        public void setRelaxedQueryChars​(java.lang.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​(java.lang.String compression)
        Set the compression setting.
        Parameters:
        compression - The compression setting
      • getCompression

        public java.lang.String getCompression()
        Get the compression setting.
        Returns:
        The compression setting
      • getCompressionLevel

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

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

        protected java.util.regex.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​(java.lang.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 java.lang.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​(java.lang.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 java.lang.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 java.lang.String getNoCompressionEncodings()
        Get the content encodings that should not be used.
        Returns:
        The content encodings that should not be used
      • setNoCompressionEncodings

        public void setNoCompressionEncodings​(java.lang.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 java.lang.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 java.util.regex.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​(java.lang.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 java.lang.String getServer()
        Get the value of the Server response header.
        Returns:
        The value of the Server response header
      • setServer

        public void setServer​(java.lang.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​(java.lang.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 java.util.Set<java.lang.String> getAllowedTrailerHeadersInternal()
        Get the set of allowed trailer header names.
        Returns:
        The set of allowed trailer header names
      • isTrailerHeaderAllowed

        public boolean isTrailerHeaderAllowed​(java.lang.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 java.lang.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​(java.lang.String header)
        Add a header name to the set of allowed trailer headers.
        Parameters:
        header - The header name to add
      • removeAllowedTrailerHeader

        public void removeAllowedTrailerHeader​(java.lang.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
      • getUpgradeProtocol

        public UpgradeProtocol getUpgradeProtocol​(java.lang.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​(java.lang.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 javax.management.ObjectName getONameForUpgrade​(java.lang.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 java.lang.String getDefaultSSLHostConfigName()
        Get the default SSL host configuration name.
        Returns:
        The default SSL host configuration name
      • setDefaultSSLHostConfigName

        public void setDefaultSSLHostConfigName​(java.lang.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​(java.lang.String hostName)
        Reload the SSL host configuration for the specified host.
        Parameters:
        hostName - The host name to reload
      • checkSni

        public boolean checkSni​(java.lang.String sniHostName,
                                java.lang.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