eclipse-vertx / eclipse-vertx/vert.x

HTTP/3 support

Open
#5,718 0 comments 3 reactions 1 assignee Claimed by @vietj View on GitHub
enhancement
Dominant language
Java
Stars
14.7k
Forks
2.1k
Avg merge
1d 10h
Merged PRs (30d)
27

Description

## Roadmap

### 5.1

- [x] [configuration](https://github.com/eclipse-vertx/vert.x/issues/5808)
- [x] [implementation](https://github.com/eclipse-vertx/vert.x/pull/5802)
- [x] outer context integration and testing
- [x] metrics
- [x] tracing
- [x] send file
- [x] network activity logging
- [x] H3 alternative services implementation
- [x] alternative services decoding
- [x] HTTP/1.1 alt-svc header support
- [x] HTTP/2 alt-svc frame support
- [x] [Alternative services client support](https://github.com/eclipse-vertx/vert.x/issues/5840)
- [ ] HTTP/3 datagrams
- [ ] following alternative services should be enabled for short names and force SNI
- [x] quic datagram event handling fix
- [x] Client hostname verification
- [x] Server alt-svc notifications
- [x] Synchronous SNI mapping to certificates
- [x] Endpoint certificate update
- [x] Server load balancing
- [ ] API
- [ ] breaking changes
- [x] [HTTP settings](https://github.com/eclipse-vertx/vert.x/pull/5886)
- [x] Stream ids
- [ ] Deprecations
- [x] [Stream reset in favor of cancellation](https://github.com/eclipse-vertx/vert.x/pull/6000)
- [x] [Connection go away in favor of shutdown](https://github.com/eclipse-vertx/vert.x/pull/6001)
- [ ] dev
- [ ] options
- [ ] connection close payload
- [x] Improve Netty Quic reset
- [x] Netty HTTP/3 frame logging
- [ ] go away strategies ?
- [x] documentation
- [ ] ...

### 5.x

- [ ] Compression
- [ ] DNS HTTPS resource record
- [ ] Connect UDP
- [ ] [Datagrams](https://datatracker.ietf.org/doc/rfc9297/)
- [ ] Netty should emit an event when sender remote address changes
- [ ] push ?
- [ ] client
- [ ] server

## Breaking changes

Implementing HTTP/3 implies a few potential breaking changes, the strategy to handle them will be on a case by case basis and attempt to minimize the amount of breaking changes to delay them until Vert.x 6 is implemented, here is a non exhaustive list:

- stream id declares long type instead of int
- settings
- ...

## Open concerns

### Compression

There is no facility for payload compression and current one for HTTP/1 and HTTP/2 are not reusable.

### Discovery

No support for HTTPS resource records in DNS resolver, this will be implemented in 5.0 using alternative services.

### Shutdown / GoAway

- H2: `GoAway` carries stream id + error code + debug data
- H3: `GoAway` only carries stream id, but quic can close with an error code + reason data, error code seems similar but reason is not the same semantic than debug.

### Reset semantic

- H2: reset means immediate termination of a stream
- H3: reset only applies to the stream outbound and means no more data will be set

Introduce stream cancellation that performs the most adapted operation according to the protocol:

- H2 : reset with `0x8` (CANCEL) code
- H3 : reset or abort reading with REQUEST_CANCELLED code

### Keep alive timeout semantic

- HTTP/1.1 / H2: connection level
- H3: stream level

### Contribution

_bibi_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.