# Interface HttpOption<T>

Type Parameters:
  `T` - The type of the option value

public sealed interface HttpOption<T>
This interface is used to provide additional request configuration option hints on how an HTTP request/response exchange should be carried out by the `HttpClient` implementation. Request configuration option hints can be provided to an `HttpRequest` with the `HttpRequest.Builder setOption` method.

Concrete instances of this class and its subclasses are immutable.

API Note:
  In this version, the `HttpOption` interface is sealed and only allows the `H3_DISCOVERY` option. However, it could be extended in the future to support additional options.

  The `H3_DISCOVERY` option can be used to help the `HttpClient` decide how to select or establish an HTTP/3 connection through which to carry out an HTTP/3 request/response exchange.

Since:
  26

## Nested Class Summary

Nested Classes
Modifier and Type
Interface
Description
`static enum`
`HttpOption.Http3DiscoveryMode`
This enumeration can be used to help the `HttpClient` decide how an HTTP/3 exchange should be established, and can be provided as the value of the `H3_DISCOVERY` option to `Builder.setOption`.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final HttpOption<HttpOption.Http3DiscoveryMode>`
`H3_DISCOVERY`
An option that can be used to configure how the `HttpClient` will select or establish an HTTP/3 connection through which to carry out the request.

## Method Summary

Modifier and Type
Method
Description
`String`
`name()`
Returns the option name.
`Class<T>`
`type()`
Returns the type of the value associated with the option.

## Field Details

### H3_DISCOVERY

static final HttpOption<HttpOption.Http3DiscoveryMode> H3_DISCOVERY
An option that can be used to configure how the `HttpClient` will select or establish an HTTP/3 connection through which to carry out the request. If `HttpClient.Version.HTTP_3` is not selected either as the request preferred version or the HttpClient preferred version setting this option on the request has no effect.

The name of this option is `"H3_DISCOVERY"`.

Implementation Note:
  The JDK built-in implementation of the `HttpClient` understands the request option `H3_DISCOVERY` hint.
  If no `H3_DISCOVERY` hint is provided, and the HTTP/3 version is selected, either as request preferred version or client preferred version, the JDK built-in implementation will establish the exchange as per `HttpOption.Http3DiscoveryMode.ANY`.

  In case of redirect, the `H3_DISCOVERY` option, if present, is always transferred to the new request.

  In this implementation, HTTP/3 through proxies is not supported. Unless `HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY` is specified, if a proxy is selected for the request URI, the protocol version is downgraded to HTTP/2 or HTTP/1.1 and the `H3_DISCOVERY` option is ignored. If, on the other hand, `HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY` is specified, the request will fail.

See Also:
  - `HttpOption.Http3DiscoveryMode`
  - `HttpRequest.Builder.setOption(HttpOption, Object)`

## Method Details

### name

String name()
Returns the option name.

Implementation Requirements:
  Different options must have different names.
Returns:
  the option name

### type

Class<T> type()
Returns the type of the value associated with the option.

API Note:
  Different options may have the same type.
Returns:
  the type of the value associated with the option