Skip to content

HTTP/3: Add additional configuration to Http3Limits #32034

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
JamesNK opened this issue Apr 21, 2021 · 6 comments
Open

HTTP/3: Add additional configuration to Http3Limits #32034

JamesNK opened this issue Apr 21, 2021 · 6 comments
Labels
api-suggestion Early API idea and discussion, it is NOT ready for implementation area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions HTTP3
Milestone

Comments

@JamesNK
Copy link
Member

JamesNK commented Apr 21, 2021

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

@ghost
Copy link

ghost commented Apr 23, 2021

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.

@Tratcher
Copy link
Member

Tratcher commented Aug 9, 2021

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?

@Tratcher
Copy link
Member

HandshakeIdleTimeoutMs maps to HttpsConnectionAdapterOptions.HandshakeTimeout

@Tratcher
Copy link
Member

Tratcher commented Aug 11, 2021

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.
    public int MaxStreamsPerConnection

@Tratcher Tratcher removed their assignment Aug 12, 2021
@adityamandaleeka adityamandaleeka added the api-suggestion Early API idea and discussion, it is NOT ready for implementation label Jul 6, 2022
@adityamandaleeka adityamandaleeka modified the milestones: 7.0-preview7, 7.0-rc1 Jul 6, 2022
@Tratcher
Copy link
Member

  • The Http3 layer will hard code MaxUnidirectionalStreamCount to ~10, these are only needed for control streams.

WebTransport will want to establish more unidirectional streams.

@adityamandaleeka
Copy link
Member

adityamandaleeka commented Nov 8, 2022

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?).

@amcasey amcasey added area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions and removed area-runtime labels Jun 2, 2023
@amcasey amcasey modified the milestones: .NET 8 Planning, Backlog Feb 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
api-suggestion Early API idea and discussion, it is NOT ready for implementation area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions HTTP3
Projects
None yet
Development

No branches or pull requests

6 participants