HTTP2 GoAway frames don't seem to be handled gracefully in keepalive connections #1041
Replies: 1 comment
|
The equality case in the report is significant, and the current code still uses For GOAWAY, That means changing the comparison to The more useful distinction is between the request that was already accepted on the old HTTP/2 connection and a subsequent request that the pool assigned to a connection after GOAWAY had arrived. Once So I'd preserve |
Uh oh!
There was an error while loading. Please reload this page.
Using the below minimal example targeting an Nginx server configured with
keepalive_time 30s;, the fourth request through the loop throws aRemoteProtocolErrorafter Nginx sends a GoAway frame.Looking at #733, I've narrowed this down to the fact that this seems to be occurring when
stream_idandlast_stream_idare equal, indeed if I patch that line to bestream_id >= last_stream_id, requests gracefully retry on a new connection.I'm not very familiar with the internals of HTTP2 so I don't know if this is an appropriate fix for all situations, but it would be great if this could work as seamlessly as it does in HTTP/1.
All reactions