eclipse-vertx / eclipse-vertx/vert.x
HTTP/3 support
- 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
Assessment
This issue has not been assessed yet.