HTTP/3: Add additional configuration to Http3Limits
JamesNK opened this issue · 6 comments
msquic has various configuration options: https://github.com/microsoft/msquic/blob/main/docs/Settings.md
At the very least the msquic options that have matching configuration in Http2Limits should be added to Http3Limits.
Examples:
- InitialConnectionWindowSize = ConnFlowControlWindow (or InitialWindowPackets?)
- InitialStreamWindowSize = StreamRecvWindowDefault
- KeepAlivePingDelay = KeepAliveIntervalMs?
- KeepAlivePingTimeout = DisconnectTimeoutMs?
Also msquic's IdleTimeoutMs should be set to KestrelServerLimits.KeepAliveTimeout
Thanks for contacting us.
We're moving this issue to the Next sprint planning
milestone for future evaluation / consideration. Because it's not immediately obvious that this is a bug in our framework, we would like to keep this around to collect more feedback, which can later help us determine the impact of it. We will re-evaluate this issue, during our next planning meeting(s).
If we later determine, that the issue has no community involvement, or it's very rare and low-impact issue, we will close it - so that the team can focus on more important and high impact issues.
To learn more about what to expect next and how this issue will be handled you can read more about our triage process here.
A lot of QuicTransportOptions should be moved to Http3Limits and passed through as features instead.
MaxUnidirectionalStreamCount
MaxBidirectionalStreamCount
IdleTimeout #34955
MaxReadBufferSize
MaxWriteBufferSize
Could QuicTransportOptions be removed entirely?
HandshakeIdleTimeoutMs maps to HttpsConnectionAdapterOptions.HandshakeTimeout
Notes for MaxUnidirectionalStreamCount, MaxBidirectionalStreamCount.
- Remove them both from the options and make them a feature at the Quic layer.
- The Http3 layer will hard code MaxUnidirectionalStreamCount to ~10, these are only needed for control streams.
- Http3Limits will add MaxStreamsPerConnection like Http2Limtis has and use it to set MaxBidirectionalStreamCount.
- The Http3 layer will hard code MaxUnidirectionalStreamCount to ~10, these are only needed for control streams.
WebTransport will want to establish more unidirectional streams.
We'll need to go through https://github.com/dotnet/aspnetcore/blob/main/src/Servers/Kestrel/Transport.Quic/src/QuicTransportOptions.cs and rethink the ones that are marked as preview (do they still need to exist? If so, where? Can they be based on other existing settings?).