diff --git a/docs/content/migration/v2-to-v3.md b/docs/content/migration/v2-to-v3.md index a574bf5e7..27d38e953 100644 --- a/docs/content/migration/v2-to-v3.md +++ b/docs/content/migration/v2-to-v3.md @@ -50,3 +50,8 @@ and should be explicitly combined using logical operators to mimic previous beha In v3, the `Content-Type` header is not auto-detected anymore when it is not set by the backend. One should use the `ContentType` middleware to enable the `Content-Type` header value auto-detection. + +## HTTP/3 + +In v3, HTTP/3 is no longer an experimental feature. +The `experimental.http3` option has been removed from the static configuration. diff --git a/docs/content/reference/static-configuration/cli-ref.md b/docs/content/reference/static-configuration/cli-ref.md index a79447131..39cb5d102 100644 --- a/docs/content/reference/static-configuration/cli-ref.md +++ b/docs/content/reference/static-configuration/cli-ref.md @@ -189,9 +189,6 @@ WriteTimeout is the maximum duration before timing out writes of the response. I `--entrypoints..udp.timeout`: Timeout defines how long to wait on an idle session before releasing the related resources. (Default: ```3```) -`--experimental.http3`: -Enable HTTP3. (Default: ```false```) - `--experimental.hub`: Enable the Traefik Hub provider. (Default: ```false```) diff --git a/docs/content/reference/static-configuration/env-ref.md b/docs/content/reference/static-configuration/env-ref.md index 41bf8c6bf..08fb6bd7d 100644 --- a/docs/content/reference/static-configuration/env-ref.md +++ b/docs/content/reference/static-configuration/env-ref.md @@ -189,9 +189,6 @@ WriteTimeout is the maximum duration before timing out writes of the response. I `TRAEFIK_ENTRYPOINTS__UDP_TIMEOUT`: Timeout defines how long to wait on an idle session before releasing the related resources. (Default: ```3```) -`TRAEFIK_EXPERIMENTAL_HTTP3`: -Enable HTTP3. (Default: ```false```) - `TRAEFIK_EXPERIMENTAL_HUB`: Enable the Traefik Hub provider. (Default: ```false```) diff --git a/docs/content/reference/static-configuration/file.toml b/docs/content/reference/static-configuration/file.toml index 73bf8f838..22420a806 100644 --- a/docs/content/reference/static-configuration/file.toml +++ b/docs/content/reference/static-configuration/file.toml @@ -461,7 +461,6 @@ [experimental] kubernetesGateway = true - http3 = true hub = true [experimental.plugins] [experimental.plugins.Descriptor0] diff --git a/docs/content/reference/static-configuration/file.yaml b/docs/content/reference/static-configuration/file.yaml index e84e553d9..596f5ab4d 100644 --- a/docs/content/reference/static-configuration/file.yaml +++ b/docs/content/reference/static-configuration/file.yaml @@ -489,7 +489,6 @@ hub: key: foobar experimental: kubernetesGateway: true - http3: true hub: true plugins: Descriptor0: diff --git a/docs/content/routing/entrypoints.md b/docs/content/routing/entrypoints.md index 119fa60e3..ece0f2c0b 100644 --- a/docs/content/routing/entrypoints.md +++ b/docs/content/routing/entrypoints.md @@ -312,39 +312,32 @@ entryPoints: #### `http3` `http3` enables HTTP/3 protocol on the entryPoint. -HTTP/3 requires a TCP entryPoint, as HTTP/3 always starts as a TCP connection that then gets upgraded to UDP. -In most scenarios, this entryPoint is the same as the one used for TLS traffic. +HTTP/3 requires a TCP entryPoint, +as HTTP/3 always starts as a TCP connection that then gets upgraded to UDP. +In most scenarios, +this entryPoint is the same as the one used for TLS traffic. + +```yaml tab="File (YAML)" +entryPoints: + name: + http3: {} +``` + +```toml tab="File (TOML)" +[entryPoints.name.http3] +``` + +```bash tab="CLI" +--entrypoints.name.http3 +``` ??? info "HTTP/3 uses UDP+TLS" - As HTTP/3 uses UDP, you can't have a TCP entryPoint with HTTP/3 on the same port as a UDP entryPoint. - Since HTTP/3 requires the use of TLS, only routers with TLS enabled will be usable with HTTP/3. - -!!! warning "Enabling Experimental HTTP/3" - - As the HTTP/3 spec is still in draft, HTTP/3 support in Traefik is an experimental feature and needs to be activated - in the experimental section of the static configuration. - - ```yaml tab="File (YAML)" - experimental: - http3: true - - entryPoints: - name: - http3: {} - ``` - - ```toml tab="File (TOML)" - [experimental] - http3 = true - - [entryPoints.name.http3] - ``` - - ```bash tab="CLI" - --experimental.http3=true - --entrypoints.name.http3 - ``` + As HTTP/3 actually uses UDP, when traefik is configured with a TCP entryPoint on port N with HTTP/3 enabled, + the underlying HTTP/3 server that is started automatically listens on UDP port N too. As a consequence, + it means port N cannot be used by another UDP entryPoint. + Since HTTP/3 requires the use of TLS, + only routers with TLS enabled will be usable with HTTP/3. #### `advertisedPort` @@ -355,9 +348,6 @@ It can be used to override the authority in the `alt-svc` header, for example if !!! info "http3.advertisedPort" ```yaml tab="File (YAML)" - experimental: - http3: true - entryPoints: name: http3: @@ -365,15 +355,11 @@ It can be used to override the authority in the `alt-svc` header, for example if ``` ```toml tab="File (TOML)" - [experimental] - http3 = true - [entryPoints.name.http3] advertisedPort = 443 ``` ```bash tab="CLI" - --experimental.http3=true --entrypoints.name.http3.advertisedport=443 ``` diff --git a/pkg/config/static/experimental.go b/pkg/config/static/experimental.go index 7f0c813ac..5f16f9898 100644 --- a/pkg/config/static/experimental.go +++ b/pkg/config/static/experimental.go @@ -8,6 +8,5 @@ type Experimental struct { LocalPlugins map[string]plugins.LocalDescriptor `description:"Local plugins configuration." json:"localPlugins,omitempty" toml:"localPlugins,omitempty" yaml:"localPlugins,omitempty" export:"true"` KubernetesGateway bool `description:"Allow the Kubernetes gateway api provider usage." json:"kubernetesGateway,omitempty" toml:"kubernetesGateway,omitempty" yaml:"kubernetesGateway,omitempty" export:"true"` - HTTP3 bool `description:"Enable HTTP3." json:"http3,omitempty" toml:"http3,omitempty" yaml:"http3,omitempty" export:"true"` Hub bool `description:"Enable the Traefik Hub provider." json:"hub,omitempty" toml:"hub,omitempty" yaml:"hub,omitempty" export:"true"` } diff --git a/pkg/config/static/static_config.go b/pkg/config/static/static_config.go index ce17087c0..da32b76f9 100644 --- a/pkg/config/static/static_config.go +++ b/pkg/config/static/static_config.go @@ -268,16 +268,6 @@ func (c *Configuration) SetEffectiveConfiguration() { c.Providers.KubernetesGateway = nil } - if c.Experimental == nil || !c.Experimental.HTTP3 { - for epName, ep := range c.EntryPoints { - if ep.HTTP3 != nil { - ep.HTTP3 = nil - log.Debug().Str(logs.EntryPointName, epName). - Msgf("Disabling HTTP3 configuration for entryPoint %q: HTTP3 is disabled in the experimental configuration section", epName) - } - } - } - // Configure Gateway API provider if c.Providers.KubernetesGateway != nil { log.Debug().Msg("Experimental Kubernetes Gateway provider has been activated")