Package org.apache.coyote.http11
Class AbstractHttp11Protocol<S>
- java.lang.Object
-
- org.apache.coyote.AbstractProtocol<S>
-
- org.apache.coyote.http11.AbstractHttp11Protocol<S>
-
- All Implemented Interfaces:
MBeanRegistration,ProtocolHandler
- Direct Known Subclasses:
AbstractHttp11JsseProtocol,Http11AprProtocol
public abstract class AbstractHttp11Protocol<S> extends AbstractProtocol<S>
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.coyote.AbstractProtocol
AbstractProtocol.ConnectionHandler<S>, AbstractProtocol.RecycledProcessors
-
-
Field Summary
Fields Modifier and Type Field Description protected static StringManagersm-
Fields inherited from class org.apache.coyote.AbstractProtocol
adapter, domain, mserver, oname, processorCache, rgOname
-
-
Constructor Summary
Constructors Constructor Description AbstractHttp11Protocol(AbstractEndpoint<S,?> endpoint)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddAllowedTrailerHeader(String header)voidaddSslHostConfig(SSLHostConfig sslHostConfig)Add a new SSL configuration for a virtual host.voidaddUpgradeProtocol(UpgradeProtocol upgradeProtocol)Add a new protocol for used by HTTP/1.1 upgrade or ALPN.protected ProcessorcreateProcessor()Create and configure a new Processor instance for the current protocol implementation.protected ProcessorcreateUpgradeProcessor(SocketWrapperBase<?> socket, UpgradeToken upgradeToken)voiddestroy()Destroy the protocol (optional).SSLHostConfig[]findSslHostConfigs()Find all configured SSL virtual host configurations which will be used by SNI.UpgradeProtocol[]findUpgradeProtocols()Return all configured upgrade protocols.StringgetAllowedTrailerHeaders()protected Set<String>getAllowedTrailerHeadersInternal()booleangetAllowHostHeaderMismatch()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?StringgetCompressibleMimeType()String[]getCompressibleMimeTypes()StringgetCompression()protected intgetCompressionLevel()intgetCompressionMinSize()intgetConnectionUploadTimeout()Specifies a different (usually longer) connection timeout during data upload.StringgetContinueResponseTiming()ContinueResponseTiminggetContinueResponseTimingInternal()StringgetDefaultSSLHostConfigName()booleangetDisableUploadTimeout()Get the flag that controls upload time-outs.protected AbstractEndpoint<S,?>getEndpoint()intgetMaxExtensionSize()intgetMaxHttpHeaderSize()intgetMaxHttpRequestHeaderSize()intgetMaxHttpResponseHeaderSize()intgetMaxKeepAliveRequests()intgetMaxSavePostSize()Return the maximum size of the post which will be saved during FORM or CLIENT-CERT authentication.intgetMaxSwallowSize()intgetMaxTrailerSize()UpgradeProtocolgetNegotiatedProtocol(String negotiatedName)Find a suitable handler for the protocol negotiated at the network layer.StringgetNoCompressionUserAgents()protected PatterngetNoCompressionUserAgentsPattern()ObjectNamegetONameForUpgrade(String upgradeProtocol)protected StringgetProtocolName()Obtain the name of the protocol, (Http, Ajp, etc.).booleangetRejectIllegalHeader()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?StringgetRelaxedPathChars()StringgetRelaxedQueryChars()StringgetRestrictedUserAgents()Get the string form of the regular expression that defines the User agents which should be restricted to HTTP/1.0 support.protected PatterngetRestrictedUserAgentsPattern()booleangetSecure()StringgetServer()booleangetServerRemoveAppProvidedValues()Should application provider values for the HTTP Server header be removed.UpgradeGroupInfogetUpgradeGroupInfo(String upgradeProtocol)UpgradeProtocolgetUpgradeProtocol(String upgradedName)Find a suitable handler for the protocol upgraded name specified.booleangetUseKeepAliveResponseHeader()booleangetUseSendfile()voidinit()Initialise the protocol.booleanisSSLEnabled()booleanisTrailerHeaderAllowed(String headerName)voidreloadSslHostConfig(String hostName)voidreloadSslHostConfigs()voidremoveAllowedTrailerHeader(String header)voidsetAllowedTrailerHeaders(String commaSeparatedHeaders)voidsetAllowHostHeaderMismatch(boolean allowHostHeaderMismatch)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?voidsetCompressibleMimeType(String valueS)voidsetCompression(String compression)voidsetCompressionMinSize(int compressionMinSize)voidsetConnectionUploadTimeout(int timeout)Set the upload timeout.voidsetContinueResponseTiming(String continueResponseTiming)voidsetDefaultSSLHostConfigName(String defaultSSLHostConfigName)voidsetDisableUploadTimeout(boolean isDisabled)Set the flag to control whether a separate connection timeout is used during upload of a request body.voidsetMaxExtensionSize(int maxExtensionSize)voidsetMaxHttpHeaderSize(int valueI)voidsetMaxHttpRequestHeaderSize(int valueI)voidsetMaxHttpResponseHeaderSize(int valueI)voidsetMaxKeepAliveRequests(int mkar)Set the maximum number of Keep-Alive requests to allow.voidsetMaxSavePostSize(int maxSavePostSize)Set the maximum size of a POST which will be buffered during FORM or CLIENT-CERT authentication.voidsetMaxSwallowSize(int maxSwallowSize)voidsetMaxTrailerSize(int maxTrailerSize)voidsetNoCompressionUserAgents(String noCompressionUserAgents)voidsetRejectIllegalHeader(boolean rejectIllegalHeader)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?voidsetRelaxedPathChars(String relaxedPathChars)voidsetRelaxedQueryChars(String relaxedQueryChars)voidsetRestrictedUserAgents(String restrictedUserAgents)Set restricted user agent list (which will downgrade the connector to HTTP/1.0 mode).voidsetSecure(boolean b)voidsetServer(String server)Set the server header name.voidsetServerRemoveAppProvidedValues(boolean serverRemoveAppProvidedValues)voidsetSSLEnabled(boolean SSLEnabled)voidsetUseKeepAliveResponseHeader(boolean useKeepAliveResponseHeader)voidsetUseSendfile(boolean useSendfile)booleanuseCompression(Request request, Response response)-
Methods inherited from class org.apache.coyote.AbstractProtocol
addWaitingProcessor, awaitConnectionsClose, closeServerSocketGraceful, getAcceptCount, getAcceptorThreadPriority, getAdapter, getAddress, getClientCertProvider, getConnectionCount, getConnectionLinger, getConnectionTimeout, getDomain, getExecutor, getGlobalRequestProcessorMBeanName, getHandler, getId, getKeepAliveTimeout, getLocalPort, getLog, getMaxConnections, getMaxHeaderCount, getMaxThreads, getMinSpareThreads, getName, getNameIndex, getNamePrefix, getObjectName, getPort, getPortOffset, getPortWithOffset, getProcessorCache, getProperty, getTcpNoDelay, getThreadPriority, getUtilityExecutor, getWaitingProcessorCount, isAprRequired, isPaused, isSendfileSupported, pause, postDeregister, postRegister, preDeregister, preRegister, removeWaitingProcessor, resume, setAcceptCount, setAcceptorThreadPriority, setAdapter, setAddress, setClientCertProvider, setConnectionLinger, setConnectionTimeout, setExecutor, setHandler, setKeepAliveTimeout, setMaxConnections, setMaxHeaderCount, setMaxThreads, setMinSpareThreads, setPort, setPortOffset, setProcessorCache, setProperty, setTcpNoDelay, setThreadPriority, setUtilityExecutor, start, startAsyncTimeout, stop, stopAsyncTimeout
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.coyote.ProtocolHandler
getDesiredBufferSize
-
-
-
-
Field Detail
-
sm
protected static final StringManager sm
-
-
Constructor Detail
-
AbstractHttp11Protocol
public AbstractHttp11Protocol(AbstractEndpoint<S,?> endpoint)
-
-
Method Detail
-
init
public void init() throws ExceptionDescription copied from interface:ProtocolHandlerInitialise the protocol.- Specified by:
initin interfaceProtocolHandler- Overrides:
initin classAbstractProtocol<S>- Throws:
Exception- If the protocol handler fails to initialise
-
destroy
public void destroy() throws ExceptionDescription copied from interface:ProtocolHandlerDestroy the protocol (optional).- Specified by:
destroyin interfaceProtocolHandler- Overrides:
destroyin classAbstractProtocol<S>- Throws:
Exception- If the protocol handler fails to destroy
-
getProtocolName
protected String getProtocolName()
Description copied from class:AbstractProtocolObtain the name of the protocol, (Http, Ajp, etc.). Used with JMX.- Specified by:
getProtocolNamein classAbstractProtocol<S>- Returns:
- the protocol name
-
getEndpoint
protected AbstractEndpoint<S,?> getEndpoint()
Over-ridden here to make the method visible to nested classes.
- Overrides:
getEndpointin classAbstractProtocol<S>
-
getContinueResponseTiming
public String getContinueResponseTiming()
-
setContinueResponseTiming
public void setContinueResponseTiming(String continueResponseTiming)
-
getContinueResponseTimingInternal
public ContinueResponseTiming getContinueResponseTimingInternal()
-
getUseKeepAliveResponseHeader
public boolean getUseKeepAliveResponseHeader()
-
setUseKeepAliveResponseHeader
public void setUseKeepAliveResponseHeader(boolean useKeepAliveResponseHeader)
-
getRelaxedPathChars
public String getRelaxedPathChars()
-
setRelaxedPathChars
public void setRelaxedPathChars(String relaxedPathChars)
-
getRelaxedQueryChars
public String getRelaxedQueryChars()
-
setRelaxedQueryChars
public void setRelaxedQueryChars(String relaxedQueryChars)
-
getAllowHostHeaderMismatch
public boolean getAllowHostHeaderMismatch()
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:
trueif Tomcat will allow such requests, otherwisefalse
-
setAllowHostHeaderMismatch
public void setAllowHostHeaderMismatch(boolean allowHostHeaderMismatch)
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-trueto allow such requests,falseto reject them with a 400
-
getRejectIllegalHeader
public boolean getRejectIllegalHeader()
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:
trueif the request will be rejected orfalseif the header will be ignored
-
setRejectIllegalHeader
public void setRejectIllegalHeader(boolean rejectIllegalHeader)
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-trueto reject requests with illegal header names or values,falseto 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 FDORM 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:
trueif 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-trueif 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)
-
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 byPattern.- Parameters:
restrictedUserAgents- The regular expression as supported byPatternfor 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 ifserveris set, any application provided value will be over-ridden.- Returns:
trueif application provided values should be removed, otherwisefalse
-
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)
-
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:ProtocolHandlerAdd a new protocol for used by HTTP/1.1 upgrade or ALPN.- Parameters:
upgradeProtocol- the protocol
-
findUpgradeProtocols
public UpgradeProtocol[] findUpgradeProtocols()
Description copied from interface:ProtocolHandlerReturn all configured upgrade protocols.- Returns:
- the protocols
-
getNegotiatedProtocol
public UpgradeProtocol getNegotiatedProtocol(String negotiatedName)
Description copied from class:AbstractProtocolFind a suitable handler for the protocol negotiated at the network layer.- Specified by:
getNegotiatedProtocolin classAbstractProtocol<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:AbstractProtocolFind a suitable handler for the protocol upgraded name specified. This is used for direct connection protocol selection.- Specified by:
getUpgradeProtocolin classAbstractProtocol<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:ProtocolHandlerAdd a new SSL configuration for a virtual host.- Parameters:
sslHostConfig- the configuration
-
findSslHostConfigs
public SSLHostConfig[] findSslHostConfigs()
Description copied from interface:ProtocolHandlerFind all configured SSL virtual host configurations which will be used by SNI.- Returns:
- the configurations
-
reloadSslHostConfigs
public void reloadSslHostConfigs()
-
reloadSslHostConfig
public void reloadSslHostConfig(String hostName)
-
createProcessor
protected Processor createProcessor()
Description copied from class:AbstractProtocolCreate and configure a new Processor instance for the current protocol implementation.- Specified by:
createProcessorin classAbstractProtocol<S>- Returns:
- A fully configured Processor instance that is ready to use
-
createUpgradeProcessor
protected Processor createUpgradeProcessor(SocketWrapperBase<?> socket, UpgradeToken upgradeToken)
- Specified by:
createUpgradeProcessorin classAbstractProtocol<S>
-
-