mirror of
https://github.com/nginx/nginx.git
synced 2024-12-29 02:11:21 -06:00
HTTP/2: switched back to RST_STREAM with NO_ERROR.
In 8df664ebe037, we've switched to maximizing stream window instead of sending RST_STREAM. Since then handling of RST_STREAM with NO_ERROR was fixed at least in Chrome, hence we switch back to using RST_STREAM. This allows more effective rejecting of large bodies, and also minimizes non-payload traffic to be accounted in the next patch.
This commit is contained in:
parent
555dc61b54
commit
4d4201fafd
@ -4284,33 +4284,11 @@ ngx_http_v2_close_stream(ngx_http_v2_stream_t *stream, ngx_int_t rc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else if (!stream->in_closed) {
|
} else if (!stream->in_closed) {
|
||||||
#if 0
|
|
||||||
if (ngx_http_v2_send_rst_stream(h2c, node->id, NGX_HTTP_V2_NO_ERROR)
|
if (ngx_http_v2_send_rst_stream(h2c, node->id, NGX_HTTP_V2_NO_ERROR)
|
||||||
!= NGX_OK)
|
!= NGX_OK)
|
||||||
{
|
{
|
||||||
h2c->connection->error = 1;
|
h2c->connection->error = 1;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
/*
|
|
||||||
* At the time of writing at least the latest versions of Chrome
|
|
||||||
* do not properly handle RST_STREAM with NO_ERROR status.
|
|
||||||
*
|
|
||||||
* See: https://bugs.chromium.org/p/chromium/issues/detail?id=603182
|
|
||||||
*
|
|
||||||
* As a workaround, the stream window is maximized before closing
|
|
||||||
* the stream. This allows a client to send up to 2 GB of data
|
|
||||||
* before getting blocked on flow control.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (stream->recv_window < NGX_HTTP_V2_MAX_WINDOW
|
|
||||||
&& ngx_http_v2_send_window_update(h2c, node->id,
|
|
||||||
NGX_HTTP_V2_MAX_WINDOW
|
|
||||||
- stream->recv_window)
|
|
||||||
!= NGX_OK)
|
|
||||||
{
|
|
||||||
h2c->connection->error = 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user