Class HttpConfiguration

java.lang.Object
org.eclipse.jetty.server.HttpConfiguration
All Implemented Interfaces:
Dumpable

@ManagedObject("HTTP Configuration") public class HttpConfiguration extends Object implements Dumpable
HTTP Configuration.

This class is a holder of HTTP configuration. Typically an HTTPConfiguration instance is instantiated and passed to a HttpConfiguration.ConnectionFactory that can create HTTP channels (e.g. HTTP, AJP or FCGI).

The configuration held by this class is not for the wire protocol, but for the interpretation and handling of HTTP requests that could be transported by a variety of protocols.

  • Field Details

    • SERVER_VERSION

      public static final String SERVER_VERSION
  • Constructor Details

    • HttpConfiguration

      public HttpConfiguration()
    • HttpConfiguration

      public HttpConfiguration(HttpConfiguration config)
      Creates a configuration from another.
      Parameters:
      config - The configuration to copy.
  • Method Details

    • addCustomizer

      public void addCustomizer(HttpConfiguration.Customizer customizer)

      Adds a HttpConfiguration.Customizer that is invoked for every request received.

      Customizers are often used to interpret optional headers (eg ForwardedRequestCustomizer) or optional protocol semantics (eg SecureRequestCustomizer).

      Parameters:
      customizer - A request customizer
    • getCustomizers

      public List<HttpConfiguration.Customizer> getCustomizers()
    • getCustomizer

      public <T> T getCustomizer(Class<T> type)
    • removeCustomizer

      public boolean removeCustomizer(HttpConfiguration.Customizer customizer)
    • getOutputBufferSize

      @ManagedAttribute("The size in bytes of the output buffer used to aggregate HTTP output") public int getOutputBufferSize()
    • getOutputAggregationSize

      @ManagedAttribute("The maximum size in bytes for HTTP output to be aggregated") public int getOutputAggregationSize()
    • getRequestHeaderSize

      @ManagedAttribute("The maximum allowed size in bytes for an HTTP request header") public int getRequestHeaderSize()
    • getResponseHeaderSize

      @ManagedAttribute("The maximum allowed size in bytes for an HTTP response header") public int getResponseHeaderSize()
    • getHeaderCacheSize

      @ManagedAttribute("The maximum allowed size in Trie nodes for an HTTP header field cache") public int getHeaderCacheSize()
    • isHeaderCacheCaseSensitive

      @ManagedAttribute("True if the header field cache is case sensitive") public boolean isHeaderCacheCaseSensitive()
    • getSecurePort

      @ManagedAttribute("The port to which Integral or Confidential security constraints are redirected") public int getSecurePort()
    • getSecureScheme

      @ManagedAttribute("The scheme with which Integral or Confidential security constraints are redirected") public String getSecureScheme()
    • isPersistentConnectionsEnabled

      @ManagedAttribute("Whether persistent connections are enabled") public boolean isPersistentConnectionsEnabled()
    • getIdleTimeout

      @ManagedAttribute("The idle timeout in ms for I/O operations during the handling of an HTTP request") public long getIdleTimeout()

      The max idle time is applied to an HTTP request for IO operations and delayed dispatch.

      Returns:
      the max idle time in ms or if == 0 implies an infinite timeout, <0 implies no HTTP channel timeout and the connection timeout is used instead.
    • setIdleTimeout

      public void setIdleTimeout(long timeoutMs)

      The max idle time is applied to an HTTP request for IO operations and delayed dispatch.

      Parameters:
      timeoutMs - the max idle time in ms or if == 0 implies an infinite timeout, <0 implies no HTTP channel timeout and the connection timeout is used instead.
    • setPersistentConnectionsEnabled

      public void setPersistentConnectionsEnabled(boolean persistentConnectionsEnabled)
    • setSendServerVersion

      public void setSendServerVersion(boolean sendServerVersion)
    • getSendServerVersion

      @ManagedAttribute("Whether to send the Server header in responses") public boolean getSendServerVersion()
    • writePoweredBy

      public void writePoweredBy(Appendable out, String preamble, String postamble) throws IOException
      Throws:
      IOException
    • setSendXPoweredBy

      public void setSendXPoweredBy(boolean sendXPoweredBy)
    • getSendXPoweredBy

      @ManagedAttribute("Whether to send the X-Powered-By header in responses") public boolean getSendXPoweredBy()
    • setSendDateHeader

      public void setSendDateHeader(boolean sendDateHeader)
      Indicates if the Date header should be sent in responses.
      Parameters:
      sendDateHeader - true if the Date header should be sent in responses
      See Also:
    • getSendDateHeader

      @ManagedAttribute("Whether to send the Date header in responses") public boolean getSendDateHeader()
      Indicates if the Date header will be sent in responses.
      Returns:
      true by default
    • setDelayDispatchUntilContent

      public void setDelayDispatchUntilContent(boolean delay)
      Set if true, delays the application dispatch until content is available (defaults to true).
      Parameters:
      delay - if true, delays the application dispatch until content is available (defaults to true)
    • isDelayDispatchUntilContent

      @ManagedAttribute("Whether to delay the application dispatch until content is available") public boolean isDelayDispatchUntilContent()
    • setUseInputDirectByteBuffers

      public void setUseInputDirectByteBuffers(boolean useInputDirectByteBuffers)
      Set whether to use direct ByteBuffers for reading.
      Parameters:
      useInputDirectByteBuffers - whether to use direct ByteBuffers for reading
    • isUseInputDirectByteBuffers

      @ManagedAttribute("Whether to use direct ByteBuffers for reading") public boolean isUseInputDirectByteBuffers()
    • setUseOutputDirectByteBuffers

      public void setUseOutputDirectByteBuffers(boolean useOutputDirectByteBuffers)
      Set whether to use direct ByteBuffers for writing.
      Parameters:
      useOutputDirectByteBuffers - whether to use direct ByteBuffers for writing
    • isUseOutputDirectByteBuffers

      @ManagedAttribute("Whether to use direct ByteBuffers for writing") public boolean isUseOutputDirectByteBuffers()
    • setCustomizers

      public void setCustomizers(List<HttpConfiguration.Customizer> customizers)

      Sets the HttpConfiguration.Customizers that are invoked for every request received.

      Customizers are often used to interpret optional headers (eg ForwardedRequestCustomizer) or optional protocol semantics (eg SecureRequestCustomizer).

      Parameters:
      customizers - the list of customizers
    • setOutputBufferSize

      public void setOutputBufferSize(int outputBufferSize)
      Set the size of the buffer into which response content is aggregated before being sent to the client. A larger buffer can improve performance by allowing a content producer to run without blocking, however larger buffers consume more memory and may induce some latency before a client starts processing the content.
      Parameters:
      outputBufferSize - buffer size in bytes.
    • setOutputAggregationSize

      public void setOutputAggregationSize(int outputAggregationSize)
      Set the max size of the response content write that is copied into the aggregate buffer. Writes that are smaller of this size are copied into the aggregate buffer, while writes that are larger of this size will cause the aggregate buffer to be flushed and the write to be executed without being copied.
      Parameters:
      outputAggregationSize - the max write size that is aggregated
    • setRequestHeaderSize

      public void setRequestHeaderSize(int requestHeaderSize)

      Larger headers will allow for more and/or larger cookies plus larger form content encoded in a URL. However, larger headers consume more memory and can make a server more vulnerable to denial of service attacks.

      Parameters:
      requestHeaderSize - the maximum size in bytes of the request header
    • setResponseHeaderSize

      public void setResponseHeaderSize(int responseHeaderSize)

      Larger headers will allow for more and/or larger cookies and longer HTTP headers (eg for redirection). However, larger headers will also consume more memory.

      Parameters:
      responseHeaderSize - the maximum size in bytes of the response header
    • setHeaderCacheSize

      public void setHeaderCacheSize(int headerCacheSize)
      Parameters:
      headerCacheSize - The size of the header field cache, in terms of unique characters branches in the lookup Index.Mutable and associated data structures.
    • setHeaderCacheCaseSensitive

      public void setHeaderCacheCaseSensitive(boolean headerCacheCaseSensitive)
    • setSecurePort

      public void setSecurePort(int securePort)

      Sets the TCP/IP port used for CONFIDENTIAL and INTEGRAL redirections.

      Parameters:
      securePort - the secure port to redirect to.
    • setSecureScheme

      public void setSecureScheme(String secureScheme)

      Set the URI scheme used for CONFIDENTIAL and INTEGRAL redirections.

      Parameters:
      secureScheme - A scheme string like "https"
    • setFormEncodedMethods

      public void setFormEncodedMethods(String... methods)
      Sets the form encoded HTTP methods.
      Parameters:
      methods - the HTTP methods of requests that can be decoded as x-www-form-urlencoded content.
    • getFormEncodedMethods

      @ManagedAttribute("The methods that support application/x-www-form-urlencoded content") public Set<String> getFormEncodedMethods()
      Returns:
      the set of HTTP methods of requests that can be decoded as application/x-www-form-urlencoded content.
    • addFormEncodedMethod

      public void addFormEncodedMethod(String method)
      Adds a form encoded HTTP Method
      Parameters:
      method - the HTTP method of requests that can be decoded as x-www-form-urlencoded content.
    • isFormEncodedMethod

      public boolean isFormEncodedMethod(String method)
      Tests whether the HTTP method supports x-www-form-urlencoded content
      Parameters:
      method - the HTTP method
      Returns:
      true if requests with this method can be decoded as x-www-form-urlencoded content.
    • getMaxErrorDispatches

      @ManagedAttribute("The maximum ERROR dispatches for a request for loop prevention (default 10)") public int getMaxErrorDispatches()
      Returns:
      The maximum error dispatches for a request to prevent looping on an error
    • setMaxErrorDispatches

      public void setMaxErrorDispatches(int max)
      Parameters:
      max - The maximum error dispatches for a request to prevent looping on an error
    • getMinRequestDataRate

      @ManagedAttribute("The minimum request content data rate in bytes per second") public long getMinRequestDataRate()
      Returns:
      The minimum request data rate in bytes per second; or <=0 for no limit
    • setMinRequestDataRate

      public void setMinRequestDataRate(long bytesPerSecond)
      Parameters:
      bytesPerSecond - The minimum request data rate in bytes per second; or <=0 for no limit
    • getMinResponseDataRate

      @ManagedAttribute("The minimum response content data rate in bytes per second") public long getMinResponseDataRate()
      Returns:
      The minimum response data rate in bytes per second; or <=0 for no limit
    • setMinResponseDataRate

      public void setMinResponseDataRate(long bytesPerSecond)

      Sets an minimum response content data rate.

      The value is enforced only approximately - not precisely - due to the fact that for efficiency reasons buffer writes may be comprised of both response headers and response content.

      Parameters:
      bytesPerSecond - The minimum response data rate in bytes per second; or <=0 for no limit
    • getHttpCompliance

      @ManagedAttribute("The HTTP compliance mode") public HttpCompliance getHttpCompliance()
    • setHttpCompliance

      public void setHttpCompliance(HttpCompliance httpCompliance)
    • getUriCompliance

      @ManagedAttribute("The URI compliance mode") public UriCompliance getUriCompliance()
    • getRedirectUriCompliance

      public UriCompliance getRedirectUriCompliance()
    • setUriCompliance

      public void setUriCompliance(UriCompliance uriCompliance)
    • setRedirectUriCompliance

      public void setRedirectUriCompliance(UriCompliance uriCompliance)
      Parameters:
      uriCompliance - The UriCompliance to apply in Response.toRedirectURI(Request, String) or null.
    • getRequestCookieCompliance

      @ManagedAttribute("The HTTP request cookie compliance mode") public CookieCompliance getRequestCookieCompliance()
      Returns:
      The CookieCompliance used for parsing request Cookie headers.
      See Also:
    • setRequestCookieCompliance

      public void setRequestCookieCompliance(CookieCompliance cookieCompliance)
      Parameters:
      cookieCompliance - The CookieCompliance to use for parsing request Cookie headers.
    • getResponseCookieCompliance

      @ManagedAttribute("The HTTP response cookie compliance mode") public CookieCompliance getResponseCookieCompliance()
      Returns:
      The CookieCompliance used for generating response Set-Cookie headers
      See Also:
    • setResponseCookieCompliance

      public void setResponseCookieCompliance(CookieCompliance cookieCompliance)
      Parameters:
      cookieCompliance - The CookieCompliance to use for generating response Set-Cookie headers
    • getMultiPartCompliance

      @ManagedAttribute("The multipart/form-data compliance mode") public MultiPartCompliance getMultiPartCompliance()
      Returns:
      the MultiPartCompliance used for validating multipart form syntax.
    • setMultiPartCompliance

      public void setMultiPartCompliance(MultiPartCompliance multiPartCompliance)
      Parameters:
      multiPartCompliance - the MultiPartCompliance used for validating multipart form syntax.
    • addComplianceViolationListener

      public void addComplianceViolationListener(ComplianceViolation.Listener listener)
      Add a ComplianceViolation.Listener to the configuration
      Parameters:
      listener - the listener to add
    • removeComplianceViolationListener

      public boolean removeComplianceViolationListener(ComplianceViolation.Listener listener)
      Remove a ComplianceViolation.Listener from the configuration
      Parameters:
      listener - the listener to remove
      Returns:
      true if this list contained the specified element
    • getComplianceViolationListeners

      public List<ComplianceViolation.Listener> getComplianceViolationListeners()
      Get the list of configured ComplianceViolation.Listener to use.
      Returns:
      the list of configured listeners
    • setNotifyRemoteAsyncErrors

      public void setNotifyRemoteAsyncErrors(boolean notifyRemoteAsyncErrors)
      Set whether remote errors, when detected, are notified to async applications.
      Parameters:
      notifyRemoteAsyncErrors - whether remote errors, when detected, are notified to async applications
    • isNotifyRemoteAsyncErrors

      @ManagedAttribute("Whether remote errors, when detected, are notified to async applications") public boolean isNotifyRemoteAsyncErrors()
      Returns:
      whether remote errors, when detected, are notified to async applications
    • setRelativeRedirectAllowed

      public void setRelativeRedirectAllowed(boolean allowed)
      Parameters:
      allowed - True if relative redirection locations are allowed
    • isRelativeRedirectAllowed

      @ManagedAttribute("Whether relative redirection locations are allowed") public boolean isRelativeRedirectAllowed()
      Returns:
      True if relative redirection locations are allowed
    • getLocalAddress

      @ManagedAttribute("Local SocketAddress override") public SocketAddress getLocalAddress()
      Get the SocketAddress override to be reported as the local address of all connections
      Returns:
      Returns the connection local address override or null.
    • setLocalAddress

      public void setLocalAddress(SocketAddress localAddress)

      Specify the connection local address used within application API layer when identifying the local host name/port of a connected endpoint.

      This allows an override of higher level APIs, such as ServletRequest.getLocalName(), ServletRequest.getLocalAddr(), and ServletRequest.getLocalPort().

      Parameters:
      localAddress - the address to use for host/addr/port, or null to reset to default behavior
    • getServerAuthority

      @ManagedAttribute("The server authority override") public HostPort getServerAuthority()
      Get the Server authority override to be used if no authority is provided by a request.
      Returns:
      Returns the connection server authority (name/port) or null
    • setServerAuthority

      public void setServerAuthority(HostPort authority)

      Specify the connection server authority (name/port) used within application API layer when identifying the server host name/port of a connected endpoint.

      This allows an override of higher level APIs, such as ServletRequest.getServerName(), and ServletRequest.getServerPort().

      Parameters:
      authority - the authority host (and optional port), or null to reset to default behavior
    • setMaxUnconsumedRequestContentReads

      public void setMaxUnconsumedRequestContentReads(int maxUnconsumedRequestContentReads)
      Sets the maximum amount of HttpStream.read()s that can be done by the HttpStream if the content is not fully consumed by the application. If this is unable to consume to EOF then the connection will be made non-persistent.
      Parameters:
      maxUnconsumedRequestContentReads - the maximum amount of reads for unconsumed content or -1 for unlimited.
    • getMaxUnconsumedRequestContentReads

      public int getMaxUnconsumedRequestContentReads()
      Gets the maximum amount of HttpStream.read()s that can be done by the HttpStream if the content is not fully consumed by the application. If this is unable to consume to EOF then the connection will be made non-persistent.
      Returns:
      the maximum amount of reads for unconsumed content or -1 for unlimited.
    • dump

      public String dump()
      Specified by:
      dump in interface Dumpable
    • dump

      public void dump(Appendable out, String indent) throws IOException
      Description copied from interface: Dumpable
      Dump this object (and children) into an Appendable using the provided indent after any new lines. The indent should not be applied to the first object dumped.
      Specified by:
      dump in interface Dumpable
      Parameters:
      out - The appendable to dump to
      indent - The indent to apply after any new lines.
      Throws:
      IOException - if unable to write to Appendable
    • toString

      public String toString()
      Overrides:
      toString in class Object