HTTP/3: reset streams with incomplete responses or timeouts.

This prevents client from closing the QUIC connection due to response parse
error.
This commit is contained in:
Roman Arutyunyan 2021-09-27 17:08:48 +03:00
parent b6b2a45fb6
commit 38d56f4ccd

View File

@ -3746,6 +3746,12 @@ ngx_http_free_request(ngx_http_request_t *r, ngx_int_t rc)
if (r->connection->timedout) {
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
#if (NGX_HTTP_V3)
if (r->connection->quic) {
(void) ngx_quic_reset_stream(r->connection,
NGX_HTTP_V3_ERR_GENERAL_PROTOCOL_ERROR);
} else
#endif
if (clcf->reset_timedout_connection) {
linger.l_onoff = 1;
linger.l_linger = 0;
@ -3757,6 +3763,14 @@ ngx_http_free_request(ngx_http_request_t *r, ngx_int_t rc)
"setsockopt(SO_LINGER) failed");
}
}
} else if (!r->response_sent) {
#if (NGX_HTTP_V3)
if (r->connection->quic) {
(void) ngx_quic_reset_stream(r->connection,
NGX_HTTP_V3_ERR_INTERNAL_ERROR);
}
#endif
}
/* the various request strings were allocated from r->pool */