Skip to content

Conversation

@seanmonstar
Copy link
Member

The RFC doesn't specify a default. h2 has an "emergency" default that's quite high. It makes sense for hyper to pick a safer default to protect users who don't think about it. When checking other libraries, many set a default of either 8kb or 16kb.

@seanmonstar seanmonstar requested a review from Noah-Kennedy April 5, 2024 13:01
The HTTP/2 does not define a default. If not defined, hyper still set a
high limit of 16mb. However, that seems very high, and most people
likely do not think to set it the property.

Since hyper tries to protect users, it will now use a default of 16kb.

The defaults in hyper are not part of the public API stability promise.
Users are encouraged to set options themselves.
@seanmonstar seanmonstar force-pushed the http2-default-max-header-list-size branch from 0ded024 to cca5172 Compare April 5, 2024 14:12
@seanmonstar seanmonstar merged commit 203d1b0 into master Apr 5, 2024
@seanmonstar seanmonstar deleted the http2-default-max-header-list-size branch April 5, 2024 17:57
ajwerner added a commit to ajwerner/tonic that referenced this pull request Aug 2, 2024
There is a bug such that if the client sends a response with a header
value that exceeds the max_header_list_size, then RPCs just hang
(hyperium#1834). When tonic upgraded to hyper 1, it picked up [hyper#3622] which
changed the default from 16MiB to 16KiB for this configuration value.
Error messages in gRPC use headers. That means that services which ever
sent error messages in excess of 16KiB (including in their error
details!) will just hang.

This commit adds the ability for the client to configure this value to
something larger (perhaps the old default of 16MiB) to mitigate the
above-referenced bug.

[hyper#3622]: hyperium/hyper#3622
github-merge-queue bot pushed a commit to hyperium/tonic that referenced this pull request Aug 3, 2024
There is a bug such that if the client sends a response with a header
value that exceeds the max_header_list_size, then RPCs just hang
(#1834). When tonic upgraded to hyper 1, it picked up [hyper#3622] which
changed the default from 16MiB to 16KiB for this configuration value.
Error messages in gRPC use headers. That means that services which ever
sent error messages in excess of 16KiB (including in their error
details!) will just hang.

This commit adds the ability for the client to configure this value to
something larger (perhaps the old default of 16MiB) to mitigate the
above-referenced bug.

[hyper#3622]: hyperium/hyper#3622
@nox
Copy link
Contributor

nox commented Dec 10, 2024

FYI when logged into Google, console.cloud.google.com sends headers bigger than this default size, thus that seems too low to me.

@seanmonstar
Copy link
Member Author

Do you have a suggested default instead?

Part of the choice here was noting that most other libraries either picked 8kb or 16kb, and rely on users to opt-in to more. I suppose one possibility we could consider is different defaults for server vs client.

@nox
Copy link
Contributor

nox commented Dec 10, 2024

The previous value was just fine in 2024 IMO.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants