Repository navigation
Honour HeaderReceived's ReadTimeout per HTTP/2 stream - #3
Merged
Merged
Conversation
fasthttp.Server.HeaderReceived lets a server give one request its own read timeout over HTTP/1.1. Over HTTP/2 every stream got the server's ReadTimeout, so a long upload on HTTP/2 could not be given more time without raising it for every request. The server now calls HeaderReceived when a stream's headers end; a non-zero ReadTimeout replaces the server's for that stream, measured from the stream's start. The request timer arms for the earliest deadline of the streams still receiving, and re-arms on every new stream, since one long deadline may otherwise hold the timer past a shorter one. Only ReadTimeout is honoured; MaxRequestBodySize and WriteTimeout are not applied per stream. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
EdgeLB gives one route, `POST /api/v1/files/upload`, a 10-minute read timeout through `fasthttp.Server.HeaderReceived`. Over HTTP/1.1 fasthttp applies that itself; over HTTP/2 this fork gave every stream the server-wide `ReadTimeout` (120 s at the edge), so a slow phone upload over HTTP/2 was still cut at 120 s.
Change
Tests
🤖 Generated with Claude Code