Class HttpServer


public abstract class HttpServer extends ServerTransport<HttpServer,HttpServerConfig>
An HttpServer allows building in a safe immutable way an HTTP server that is materialized and connecting when ServerTransport.bind() is ultimately called.

Examples:

 
 HttpServer.create()
           .host("0.0.0.0")
           .handle((req, res) -> res.sendString(Flux.just("hello")))
           .bind()
           .block();
 
 
Author:
Stephane Maldini, Violeta Georgieva
  • Constructor Details

    • HttpServer

      public HttpServer()
  • Method Details

    • create

      public static HttpServer create()
      Prepare an HttpServer.
      Returns:
      a new HttpServer
    • from

      @Deprecated public static HttpServer from(TcpServer tcpServer)
      Deprecated.
      Use the other methods exposed by HttpServer to achieve the same configurations. This method will be removed in version 1.1.0.
      Prepare an HttpServer

      Note: There isn't only one method that replaces this deprecated method. The configuration that can be done with this deprecated method, can also be done with the other methods exposed by HttpServer.

      Examples:

      Configuration via the deprecated '.from(...)' method

       
       HttpServer.from(
           TcpServer.attr(...) // configures the channel attributes
                    .bindAddress(...) // configures the bind (local) address
                    .childAttr(...) // configures the child channel attributes
                    .childObserve() // configures the child channel connection observer
                    .childOption(...) // configures the child channel options
                    .channelGroup(...) // configures the channel group
                    .doOnBound(...) // configures the doOnBound callback
                    .doOnChannelInit(...) // configures the channel handler
                    .doOnConnection(...) // configures the doOnConnection callback
                    .doOnUnbound(...) // configures the doOnUnbound callback
                    .metrics(...) // configures the metrics
                    .observe() // configures the connection observer
                    .option(...) // configures the channel options
                    .runOn(...) // configures the event loop group
                    .secure() // configures the SSL
                    .wiretap()) // configures the wire logging
       
       

      Configuration via the other methods exposed by HttpServer

       
       HttpServer.attr(...) // configures the channel attributes
                 .bindAddress(...) // configures the bind (local) address
                 .childAttr(...) // configures the child channel attributes
                 .childObserve() // configures the child channel connection observer
                 .childOption(...) // configures the child channel options
                 .channelGroup(...) // configures the channel group
                 .doOnBound(...) // configures the doOnBound callback
                 .doOnChannelInit(...) // configures the channel handler
                 .doOnConnection(...) // configures the doOnConnection callback
                 .doOnUnbound(...) // configures the doOnUnbound callback
                 .metrics(...) // configures the metrics
                 .observe() // configures the connection observer
                 .option(...) // configures the channel options
                 .runOn(...) // configures the event loop group
                 .secure() // configures the SSL
                 .wiretap() // configures the wire logging
       
       

      Wire logging in plain text

       
       HttpServer.wiretap("logger", LogLevel.DEBUG, AdvancedByteBufFormat.TEXTUAL)
       
       
      Returns:
      a new HttpServer
    • accessLog

      public final HttpServer accessLog(boolean enable)
      Enable or disable the access log. If enabled, the default log system will be used.

      Example:

       
       HttpServer.create()
                 .port(8080)
                 .route(r -> r.get("/hello",
                         (req, res) -> res.header(CONTENT_TYPE, TEXT_PLAIN)
                                          .sendString(Mono.just("Hello World!"))))
                 .accessLog(true)
                 .bindNow()
                 .onDispose()
                 .block();
       
       

      Note that this method takes precedence over the "reactor.netty.http.server.accessLogEnabled" system property.

      Parameters:
      enable - enable or disable the access log
      Returns:
      a new HttpServer
      Since:
      1.0.3
    • accessLog

      public final HttpServer accessLog(boolean enable, AccessLogFactory accessLogFactory)
      Enable or disable the access log and customize it through an AccessLogFactory.

      Example:

       
       HttpServer.create()
                 .port(8080)
                 .route(r -> r.get("/hello",
                         (req, res) -> res.header(CONTENT_TYPE, TEXT_PLAIN)
                                          .sendString(Mono.just("Hello World!"))))
                 .accessLog(true, AccessLogFactory.createFilter(
                         args -> String.valueOf(args.uri()).startsWith("/health"),
                         args -> AccessLog.create("user-agent={}", args.requestHeader("user-agent"))
                  )
                 .bindNow()
                 .onDispose()
                 .block();
       
       

      The AccessLogFactory class offers several helper methods to generate such a function, notably if one wants to filter some requests out of the access log. Note that this method takes precedence over the "reactor.netty.http.server.accessLogEnabled" system property.

      Parameters:
      enable - enable or disable the access log
      accessLogFactory - the AccessLogFactory that creates an AccessLog given an AccessLogArgProvider
      Returns:
      a new HttpServer
      Since:
      1.0.3
    • accessLog

      @Deprecated public final HttpServer accessLog(Function<AccessLogArgProvider,@Nullable AccessLog> accessLogFactory)
      Deprecated.
      as of 1.0.3. Prefer the variant with the AccessLogFactory interface instead. This method will be removed in version 1.2.0.
      Customize the access log, provided access logging has been enabled through the "reactor.netty.http.server.accessLogEnabled" system property.

      Example:

       
       HttpServer.create()
                 .port(8080)
                 .route(r -> r.get("/hello",
                         (req, res) -> res.header(CONTENT_TYPE, TEXT_PLAIN)
                                          .sendString(Mono.just("Hello World!"))))
                 .accessLog(argProvider ->
                         AccessLog.create("user-agent={}", argProvider.requestHeader("user-agent")))
                 .bindNow()
                 .onDispose()
                 .block();
       
       

      Parameters:
      accessLogFactory - the Function that creates an AccessLog given an AccessLogArgProvider
      Returns:
      a new HttpServer
      Since:
      1.0.1
    • bindAddress

      public final HttpServer bindAddress(Supplier<? extends SocketAddress> bindAddressSupplier)
      Description copied from class: Transport
      Set a new local address to which this transport should bind on subscribe.
      Overrides:
      bindAddress in class Transport<HttpServer,HttpServerConfig>
      Parameters:
      bindAddressSupplier - A supplier of the address to bind to.
      Returns:
      a new Transport
    • channelGroup

      public final HttpServer channelGroup(ChannelGroup channelGroup)
      Description copied from class: Transport
      Provide a ChannelGroup to hold all active connected channels.

      Graceful Shutdown:

      When a ChannelGroup is set, calls to DisposableChannel.disposeNow() and DisposableChannel.disposeNow(Duration) not only stop accepting new requests but also additionally wait for all active requests, in the ChannelGroup, to complete, within the given timeout.

      Overrides:
      channelGroup in class Transport<HttpServer,HttpServerConfig>
      Parameters:
      channelGroup - a ChannelGroup
      Returns:
      a new Transport reference
    • compress

      public final HttpServer compress(BiPredicate<HttpServerRequest,HttpServerResponse> predicate)
      Enable GZip response compression if the client request presents accept encoding headers and the provided Predicate matches.

      Note: the passed HttpServerRequest and HttpServerResponse should be considered read-only and the implement SHOULD NOT consume or write the request/response in this predicate.

      Parameters:
      predicate - that returns true to compress the response.
      Returns:
      a new HttpServer
    • compress

      public final HttpServer compress(boolean compressionEnabled)
      Specifies whether GZip response compression is enabled if the client request presents accept encoding. Default compression level is 6.
      Parameters:
      compressionEnabled - if true GZip response compression is enabled if the client request presents accept encoding, otherwise disabled.
      Returns:
      a new HttpServer
    • compress

      public final HttpServer compress(int minResponseSize)
      Enable GZip response compression if the client request presents accept encoding headers AND the response reaches a minimum threshold.
      Parameters:
      minResponseSize - compression is performed once response size exceeds the given value in bytes
      Returns:
      a new HttpServer
    • compressOptions

      public final HttpServer compressOptions(HttpCompressionOption... compressionOptions)
      Specifies GZip, Deflate, ZSTD compression option with GzipOption, DeflateOption, ZstdOption.
      Parameters:
      compressionOptions - configures HttpCompressionOption after enable compress
       
       HttpServer.create()
                 .compress(true)
                 .compressOptions(
                         GzipOption.builder()
                                   .compressionLevel(6)
                                   .windowBits(15)
                                   .memoryLevel(8)
                                   .build(),
                         ZstdOption.builder()
                                   .compressionLevel(3)
                                   .build()
                 )
                 .bindNow();
       
       
      Returns:
      a new HttpServer
      Since:
      1.2.3
    • cookieCodec

      @Deprecated public final HttpServer cookieCodec(ServerCookieEncoder encoder)
      Deprecated.
      as of 1.1.0. This will be removed in 2.0.0 as Netty 5 supports only strict validation.
      Configure the ServerCookieEncoder; ServerCookieDecoder will be chosen based on the encoder.
      Parameters:
      encoder - the preferred ServerCookieEncoder
      Returns:
      a new HttpServer
    • cookieCodec

      @Deprecated public final HttpServer cookieCodec(ServerCookieEncoder encoder, ServerCookieDecoder decoder)
      Deprecated.
      as of 1.1.0. This will be removed in 2.0.0 as Netty 5 supports only strict validation.
      Parameters:
      encoder - the preferred ServerCookieEncoder
      decoder - the preferred ServerCookieDecoder
      Returns:
      a new HttpServer
    • errorLog

      public final HttpServer errorLog(boolean enable)
      Enable or disable the error log. If enabled, the default log system will be used.

      Example:

       
       HttpServer.create()
                 .port(8080)
                 .route(r -> r.get("/hello",
                         (req, res) -> res.header(CONTENT_TYPE, TEXT_PLAIN)
                                          .sendString(Mono.just("Hello World!"))))
                 .errorLog(true)
                 .bindNow()
                 .onDispose()
                 .block();
       
       

      Note that this method takes precedence over the "reactor.netty.http.server.errorLogEnabled" system property. By default, error logs are formatted as [{datetime}] [pid {pid}] [client {remote address}] {error message}.

      Parameters:
      enable - enable or disable the error log
      Returns:
      a new HttpServer
      Since:
      1.2.6
    • errorLog

      public final HttpServer errorLog(boolean enable, ErrorLogFactory errorLogFactory)
      Enable or disable the error log and customize it through an ErrorLogFactory.

      Example:

       
       HttpServer.create()
                 .port(8080)
                 .route(r -> r.get("/hello",
                         (req, res) -> res.header(CONTENT_TYPE, TEXT_PLAIN)
                                          .sendString(Mono.just("Hello World!"))))
                 .errorLog(true, ErrorLogFactory.createFilter(
                         args -> args.cause() instanceof RuntimeException,
                         args -> ErrorLog.create("host-name={}", args.httpServerInfos().hostName())))
                 .bindNow()
                 .onDispose()
                 .block();
       
       

      The ErrorLogFactory class offers several helper methods to generate such a function, notably if one wants to filter some exceptions out of the error log.

      Note that this method takes precedence over the "reactor.netty.http.server.errorLogEnabled" system property.

      Parameters:
      enable - enable or disable the error log
      errorLogFactory - the ErrorLogFactory that creates an ErrorLog given an ErrorLogArgProvider
      Returns:
      a new HttpServer
      Since:
      1.2.6
    • forwarded

      public final HttpServer forwarded(BiFunction<ConnectionInfo,HttpRequest,ConnectionInfo> handler)
      Specifies a custom request handler for deriving information about the connection.
      Parameters:
      handler - the forwarded header handler
      Returns:
      a new HttpServer
      Since:
      0.9.12
    • forwarded

      public final HttpServer forwarded(boolean forwardedEnabled)
      Specifies whether support for the "Forwarded" and "X-Forwarded-*" HTTP request headers for deriving information about the connection is enabled.
      Parameters:
      forwardedEnabled - if true support for the "Forwarded" and "X-Forwarded-*" HTTP request headers for deriving information about the connection is enabled, otherwise disabled.
      Returns:
      a new HttpServer
      Since:
      0.9.7
    • handle

      public final HttpServer handle(BiFunction<? super HttpServerRequest,? super HttpServerResponse,? extends Publisher<Void>> handler)
      Attach an I/O handler to react on a connected client.
      Parameters:
      handler - an I/O handler that can dispose underlying connection when Publisher terminates. Only the first registered handler will subscribe to the returned Publisher while other will immediately cancel given a same Connection
      Returns:
      a new HttpServer
    • host

      public final HttpServer host(String host)
      Description copied from class: ServerTransport
      The host to which this server should bind.
      Overrides:
      host in class ServerTransport<HttpServer,HttpServerConfig>
      Parameters:
      host - the host to bind to.
      Returns:
      a new ServerTransport reference
    • http2Settings

      public final HttpServer http2Settings(Consumer<Http2SettingsSpec.Builder> http2Settings)
      Apply HTTP/2 configuration.
      Parameters:
      http2Settings - configures Http2SettingsSpec before requesting
      Returns:
      a new HttpServer
    • http3Settings

      @Incubating public final HttpServer http3Settings(Consumer<Http3SettingsSpec.Builder> http3Settings)
      Apply HTTP/3 configuration.
      Parameters:
      http3Settings - configures Http3SettingsSpec before requesting
      Returns:
      a new HttpServer
      Since:
      1.2.0
    • httpFormDecoder

      public final HttpServer httpFormDecoder(Consumer<HttpServerFormDecoderProvider.Builder> formDecoderBuilder)
      Apply HTTP form decoder configuration. The configuration is used when HttpServerRequest.receiveForm() is invoked. When a specific configuration per request is needed HttpServerRequest.receiveForm(Consumer) should be used.
      Parameters:
      formDecoderBuilder - HttpServerFormDecoderProvider.Builder for HTTP form decoder configuration
      Returns:
      a new HttpServer
      Since:
      1.0.11
    • httpMessageLogFactory

      public final HttpServer httpMessageLogFactory(HttpMessageLogFactory httpMessageLogFactory)
      When HttpMessage is about to be logged the configured factory will be used for generating a sanitized log message.

      Default to ReactorNettyHttpMessageLogFactory:

      • hides the query from the uri
      • hides the headers values
      • only DecoderException message is presented
      Parameters:
      httpMessageLogFactory - the factory for generating the log message
      Returns:
      a new HttpServer
      Since:
      1.0.24
    • httpRequestDecoder

      public final HttpServer httpRequestDecoder(Function<HttpRequestDecoderSpec,HttpRequestDecoderSpec> requestDecoderOptions)
      Configure the HttpServerCodec's request decoding options.
      Parameters:
      requestDecoderOptions - a function to mutate the provided Http request decoder options
      Returns:
      a new HttpServer
    • idleTimeout

      public final HttpServer idleTimeout(Duration idleTimeout)
      Specifies an idle timeout on the connection when it is waiting for an HTTP request (resolution: ms). Once the timeout is reached the connection will be closed.

      If an idleTimeout is not specified, this indicates no timeout (i.e. infinite), which means the connection will be closed only if one of the peers decides to close it.

      If the idleTimeout is less than 1ms, then 1ms will be the idle timeout.

      By default idleTimeout is not specified.

      Parameters:
      idleTimeout - an idle timeout on the connection when it is waiting for an HTTP request (resolution: ms)
      Returns:
      a new HttpServer
      Since:
      0.9.15
    • mapHandle

      public final HttpServer mapHandle(BiFunction<? super Mono<Void>,? super Connection,? extends Mono<Void>> mapHandle)
      Decorate the configured I/O handler. See handle(BiFunction).
      Parameters:
      mapHandle - A BiFunction to decorate the configured I/O handler
      Returns:
      a new HttpServer
    • maxKeepAliveRequests

      public final HttpServer maxKeepAliveRequests(int maxKeepAliveRequests)
      The maximum number of HTTP/1.1 requests which can be served until the connection is closed by the server. Setting this attribute to:
      • -1: The connection serves unlimited number of requests. It is up to the I/O handler to decide to close the connection. This is the default behaviour.
      • 1: The connection is marked as non persistent and serves just one request.
      • >1: The connection serves a number of requests up to the specified maximum number then the connection is closed by the server.
      Parameters:
      maxKeepAliveRequests - the maximum number of HTTP/1.1 requests which can be served until the connection is closed by the server
      Returns:
      a new HttpServer
      Since:
      1.0.13
    • metrics

      public final HttpServer metrics(boolean enable, Function<String,String> uriTagValue)
      Whether to enable metrics to be collected and registered in Micrometer's globalRegistry under the name Metrics.HTTP_SERVER_PREFIX.

      uriTagValue function receives the actual uri and returns the uri tag value that will be used for the metrics with Metrics.URI tag. For example instead of using the actual uri "/users/1" as uri tag value, templated uri "/users/{id}" can be used.

      Note: It is strongly recommended to provide template-like form for the URIs. Without a conversion to a template-like form, each distinct URI leads to the creation of a distinct tag, which takes a lot of memory for the metrics.

      Note: It is strongly recommended applications to configure an upper limit for the number of the URI tags. For example:

       Metrics.globalRegistry
              .config()
              .meterFilter(MeterFilter.maximumAllowableTags(HTTP_SERVER_PREFIX, URI, 100, MeterFilter.deny()));
       

      By default metrics are not enabled.

      Parameters:
      enable - true enables metrics collection; false disables it
      uriTagValue - a function that receives the actual uri and returns the uri tag value that will be used for the metrics with Metrics.URI tag
      Returns:
      a new HttpServer
      Since:
      0.9.7
    • metrics

      public final HttpServer metrics(boolean enable, Function<String,String> uriTagValue, Function<String,String> methodTagValue)
      Whether to enable metrics to be collected and registered in Micrometer's globalRegistry under the name Metrics.HTTP_SERVER_PREFIX.

      uriTagValue function receives the actual uri and returns the uri tag value that will be used for the metrics with Metrics.URI tag. For example instead of using the actual uri "/users/1" as uri tag value, templated uri "/users/{id}" can be used.

      Note: It is strongly recommended to provide template-like form for the URIs. Without a conversion to a template-like form, each distinct URI leads to the creation of a distinct tag, which takes a lot of memory for the metrics.

      Note: It is strongly recommended applications to configure an upper limit for the number of the URI tags. For example:

       Metrics.globalRegistry
              .config()
              .meterFilter(MeterFilter.maximumAllowableTags(HTTP_SERVER_PREFIX, URI, 100, MeterFilter.deny()));
       

      methodTagValue function receives the actual method name and returns the method tag value that will be used for the metrics with Metrics.METHOD tag.

      By default metrics are not enabled.

      Parameters:
      enable - true enables metrics collection; false disables it
      uriTagValue - a function that receives the actual uri and returns the uri tag value that will be used for the metrics with Metrics.URI tag
      methodTagValue - a function that receives the actual method name and returns the method tag value that will be used for the metrics with Metrics.METHOD tag
      Returns:
      a new HttpServer
      Since:
      1.0.39
    • metrics

      public final HttpServer metrics(boolean enable, Supplier<? extends ChannelMetricsRecorder> recorder)
      Description copied from class: Transport
      Specifies whether the metrics are enabled on the Transport. All generated metrics are provided to the specified recorder which is only instantiated if metrics are being enabled (the instantiation is not lazy, but happens immediately, while configuring the Transport).
      Overrides:
      metrics in class Transport<HttpServer,HttpServerConfig>
      Parameters:
      enable - if true enables the metrics on the Transport.
      recorder - a supplier for the ChannelMetricsRecorder
      Returns:
      a new Transport reference
    • metrics

      public final HttpServer metrics(boolean enable, Supplier<? extends ChannelMetricsRecorder> recorder, Function<String,String> uriValue)
      Specifies whether the metrics are enabled on the HttpServer. All generated metrics are provided to the specified recorder which is only instantiated if metrics are being enabled (the instantiation is not lazy, but happens immediately, while configuring the HttpServer).

      uriValue function receives the actual uri and returns the uri value that will be used when the metrics are propagated to the recorder. For example instead of using the actual uri "/users/1" as uri value, templated uri "/users/{id}" can be used.

      Parameters:
      enable - true enables metrics collection; false disables it
      recorder - a supplier for the metrics recorder that receives the collected metrics
      uriValue - a function that receives the actual uri and returns the uri value that will be used when the metrics are propagated to the recorder.
      Returns:
      a new HttpServer
    • metrics

      public final HttpServer metrics(boolean enable, Supplier<? extends ChannelMetricsRecorder> recorder, Function<String,String> uriValue, Function<String,String> methodValue)
      Specifies whether the metrics are enabled on the HttpServer. All generated metrics are provided to the specified recorder which is only instantiated if metrics are being enabled (the instantiation is not lazy, but happens immediately, while configuring the HttpServer).

      uriValue function receives the actual uri and returns the uri value that will be used when the metrics are propagated to the recorder. For example instead of using the actual uri "/users/1" as uri value, templated uri "/users/{id}" can be used.

      methodValue function receives the actual method name and returns the method value that will be used when the metrics are propagated to the recorder.

      Parameters:
      enable - true enables metrics collection; false disables it
      recorder - a supplier for the metrics recorder that receives the collected metrics
      uriValue - a function that receives the actual uri and returns the uri value that will be used when the metrics are propagated to the recorder.
      methodValue - a function that receives the actual method name and returns the method value that will be used when the metrics are propagated to the recorder.
      Returns:
      a new HttpServer
      Since:
      1.0.39
    • noSSL

      public final HttpServer noSSL()
      Removes any previously applied SSL configuration customization.
      Returns:
      a new HttpServer
    • port

      public final HttpServer port(int port)
      The port to which this server should bind. If a port is not specified, the system picks up an ephemeral port.
      Overrides:
      port in class ServerTransport<HttpServer,HttpServerConfig>
      Parameters:
      port - The port to bind to.
      Returns:
      a new HttpServer
    • protocol

      public final HttpServer protocol(HttpProtocol... supportedProtocols)
      The HTTP protocol to support. Default is HttpProtocol.HTTP11.
      Parameters:
      supportedProtocols - The various HttpProtocol this server will support
      Returns:
      a new HttpServer
    • proxyProtocol

      public final HttpServer proxyProtocol(ProxyProtocolSupportType proxyProtocolSupportType)
      Specifies whether support for the "HAProxy proxy protocol" for deriving information about the address of the remote peer is enabled.
      Parameters:
      proxyProtocolSupportType -
      Returns:
      a new HttpServer
    • readTimeout

      public final HttpServer readTimeout(@Nullable Duration readTimeout)
      Specifies the maximum duration allowed between each network-level read operation while reading a given request content (resolution: ms). In other words, ReadTimeoutHandler is added to the channel pipeline after all the request headers are received, and removed from the channel pipeline after the content is fully received. If the readTimeout is null, any previous setting will be removed and no readTimeout will be applied. If the readTimeout is less than 1ms, then 1ms will be the readTimeout.
      Parameters:
      readTimeout - the maximum duration allowed between each network-level read operation while reading a given request content (resolution: ms)
      Returns:
      a new HttpServer
      Since:
      1.1.9
      See Also:
    • requestTimeout

      public final HttpServer requestTimeout(@Nullable Duration requestTimeout)
      Specifies the maximum duration for reading a given request content (resolution: ms). If the requestTimeout is null, any previous setting will be removed and no requestTimeout will be applied. If the requestTimeout is less than 1ms, then 1ms will be the requestTimeout.
      Parameters:
      requestTimeout - the maximum duration for reading a given request content (resolution: ms)
      Returns:
      a new HttpServer
      Since:
      1.1.9
    • route

      public final HttpServer route(Consumer<? super HttpServerRoutes> routesBuilder)
      Define routes for the server through the provided HttpServerRoutes builder.
      Parameters:
      routesBuilder - provides a route builder to be mutated in order to define routes.
      Returns:
      a new HttpServer starting the router on subscribe
    • secure

      public final HttpServer secure(Consumer<? super SslProvider.SslContextSpec> sslProviderBuilder)
      Apply an SSL configuration customization via the passed builder. The builder will produce the SslContext to be passed to with a default value of:
      • 10 seconds handshake timeout unless the environment property reactor.netty.tcp.sslHandshakeTimeout is set.
      • 3 seconds close_notify flush timeout
      • 0 second close_notify read timeout
      If self-signed certificate needs to be used, the sample below can be used (the functionality is provided by io.netty:netty-pkitesting). Note that self-signed certificate should not be used in production.
       
           X509Bundle cert =
                   new CertificateBuilder().subject("CN=localhost").setIsCertificateAuthority(true).buildSelfSigned();
           Http11SslContextSpec http11SslContextSpec =
                   Http11SslContextSpec.forServer(cert.toTempCertChainPem(), cert.toTempPrivateKeyPem());
           secure(sslContextSpec -> sslContextSpec.sslContext(http11SslContextSpec));
       
       
      Parameters:
      sslProviderBuilder - builder callback for further customization of SslContext.
      Returns:
      a new HttpServer
    • secure

      public final HttpServer secure(Consumer<? super SslProvider.SslContextSpec> sslProviderBuilder, boolean redirectHttpToHttps)
      Apply an SSL configuration customization via the passed builder. The builder will produce the SslContext to be passed to with a default value of:
      • 10 seconds handshake timeout unless the environment property reactor.netty.tcp.sslHandshakeTimeout is set.
      • 3 seconds close_notify flush timeout
      • 0 second close_notify read timeout

      If self-signed certificate needs to be used, the sample below can be used (the functionality is provided by io.netty:netty-pkitesting). Note that self-signed certificate should not be used in production.

       
           X509Bundle cert =
                   new CertificateBuilder().subject("CN=localhost").setIsCertificateAuthority(true).buildSelfSigned();
           Http11SslContextSpec http11SslContextSpec =
                   Http11SslContextSpec.forServer(cert.toTempCertChainPem(), cert.toTempPrivateKeyPem());
           secure(sslContextSpec -> sslContextSpec.sslContext(http11SslContextSpec), true);
       
       
      Parameters:
      sslProviderBuilder - builder callback for further customization of SslContext.
      redirectHttpToHttps - true enables redirecting HTTP to HTTPS by changing the scheme only but otherwise leaving the port the same. This configuration is applicable only for HTTP 1.x.
      Returns:
      a new HttpServer
      Since:
      1.0.5
    • secure

      public final HttpServer secure(SslProvider sslProvider)
      Applies an SSL configuration via the passed SslProvider. If self-signed certificate needs to be used, the sample below can be used (the functionality is provided by io.netty:netty-pkitesting). Note that self-signed certificate should not be used in production.
       
           X509Bundle cert =
                   new CertificateBuilder().subject("CN=localhost").setIsCertificateAuthority(true).buildSelfSigned();
           Http11SslContextSpec http11SslContextSpec =
                   Http11SslContextSpec.forServer(cert.toTempCertChainPem(), cert.toTempPrivateKeyPem());
           secure(sslContextSpec -> sslContextSpec.sslContext(http11SslContextSpec));
       
       
      Parameters:
      sslProvider - The provider to set when configuring SSL
      Returns:
      a new HttpServer
    • secure

      public final HttpServer secure(SslProvider sslProvider, boolean redirectHttpToHttps)
      Applies an SSL configuration via the passed SslProvider.

      If self-signed certificate needs to be used, the sample below can be used (the functionality is provided by io.netty:netty-pkitesting). Note that self-signed certificate should not be used in production.

       
           X509Bundle cert =
                   new CertificateBuilder().subject("CN=localhost").setIsCertificateAuthority(true).buildSelfSigned();
           Http11SslContextSpec http11SslContextSpec =
                   Http11SslContextSpec.forServer(cert.toTempCertChainPem(), cert.toTempPrivateKeyPem());
           secure(sslContextSpec -> sslContextSpec.sslContext(http11SslContextSpec), true);
       
       
      Parameters:
      sslProvider - The provider to set when configuring SSL
      redirectHttpToHttps - true enables redirecting HTTP to HTTPS by changing the scheme only but otherwise leaving the port the same. This configuration is applicable only for HTTP 1.x.
      Returns:
      a new HttpServer
      Since:
      1.0.5
    • tcpConfiguration

      @Deprecated public final HttpServer tcpConfiguration(Function<? super TcpServer,? extends TcpServer> tcpMapper)
      Deprecated.
      Use the other methods exposed by HttpServer to achieve the same configurations. This method will be removed in version 1.1.0.
      Apply a TcpServer mapping function to update TCP configuration and return an enriched HttpServer to use.

      Note: There isn't only one method that replaces this deprecated method. The configuration that can be done with this deprecated method, can also be done with the other methods exposed by HttpServer.

      Examples:

      Configuration via the deprecated '.tcpConfiguration(...)' method

       
       HttpServer.tcpConfiguration(tcpServer ->
           tcpServer.attr(...) // configures the channel attributes
                    .bindAddress(...) // configures the bind (local) address
                    .channelGroup(...) // configures the channel group
                    .childAttr(...) // configures the child channel attributes
                    .childObserve(...) // configures the child channel connection observer
                    .childOption(...) // configures the child channel options
                    .doOnBound(...) // configures the doOnBound callback
                    .doOnChannelInit(...) // configures the channel handler
                    .doOnConnection(...) // configures the doOnConnection callback
                    .doOnUnbound(...) // configures the doOnUnbound callback
                    .handle(...) // configures the I/O handler
                    .host(...) // configures the host name
                    .metrics(...) // configures the metrics
                    .noSSL() // removes SSL configuration
                    .observe() // configures the connection observer
                    .option(...) // configures the channel options
                    .port(...) // configures the port
                    .runOn(...) // configures the event loop group
                    .secure() // configures the SSL
                    .wiretap()) // configures the wire logging
       
       

      Configuration via the other methods exposed by HttpServer

       
       HttpServer.attr(...) // configures the channel attributes
                 .bindAddress(...) // configures the bind (local) address
                 .channelGroup(...) // configures the channel group
                 .childAttr(...) // configures the child channel attributes
                 .childObserve(...) // configures the child channel connection observer
                 .childOption(...) // configures the child channel options
                 .doOnBound(...) // configures the doOnBound callback
                 .doOnChannelInit(...) // configures the channel handler
                 .doOnConnection(...) // configures the doOnConnection callback
                 .doOnUnbound(...) // configures the doOnUnbound callback
                 .handle(...) // configures the I/O handler
                 .host(...) // configures the host name
                 .metrics(...) // configures the metrics
                 .noSSL() // removes SSL configuration
                 .observe() // configures the connection observer
                 .option(...) // configures the channel options
                 .port(...) // configures the port
                 .runOn(...) // configures the event loop group
                 .secure() // configures the SSL
                 .wiretap() // configures the wire logging
       
       

      Wire logging in plain text

       
       HttpServer.wiretap("logger", LogLevel.DEBUG, AdvancedByteBufFormat.TEXTUAL)
       
       
      Parameters:
      tcpMapper - A TcpServer mapping function to update TCP configuration and return an enriched HttpServer to use.
      Returns:
      a new HttpServer
    • warmup

      public Mono<Void> warmup()
      Based on the actual configuration, returns a Mono that triggers:
      • an initialization of the event loop groups
      • loads the necessary native libraries for the transport
      • loads the necessary native libraries for the security if there is such
      By default, when method is not used, the bind operation absorbs the extra time needed to load resources.
      Overrides:
      warmup in class ServerTransport<HttpServer,HttpServerConfig>
      Returns:
      a Mono representing the completion of the warmup
      Since:
      1.0.3
    • wiretap

      public final HttpServer wiretap(boolean enable)
      Description copied from class: Transport
      Apply or remove a wire logger configuration using Transport category (logger), DEBUG logger level and AdvancedByteBufFormat.HEX_DUMP for ByteBuf format, which means both events and content will be logged and the content will be in hex format.
      Overrides:
      wiretap in class Transport<HttpServer,HttpServerConfig>
      Parameters:
      enable - specifies whether the wire logger configuration will be added to the pipeline
      Returns:
      a new Transport reference