mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-04-28 09:40:59 +02:00
MINOR: mux-h2: Set REFUSED_STREAM error to reset a stream if no data was never sent
According to the H2 spec (see #8.1.4), setting the REFUSED_STREAM error code is a way to indicate that the stream is being closed prior to any processing having occurred, such as when a server-side H1 keepalive connection is closed without sending anything (which differs from the regular error case since haproxy doesn't even generate an error message). Any request that was sent on the reset stream can be safely retried. So, when a stream is closed, if no data was ever sent back (ie. the flag H2_SF_HEADERS_SENT is not set), we can set the REFUSED_STREAM error code on the RST_STREAM frame. This patch may be backported to 1.9.
This commit is contained in:
parent
f02ca00a36
commit
35757d38ce
14
src/mux_h2.c
14
src/mux_h2.c
@ -3087,6 +3087,13 @@ static void h2_do_shutr(struct h2s *h2s)
|
||||
h2c_error(h2c, H2_ERR_ENHANCE_YOUR_CALM);
|
||||
h2s_error(h2s, H2_ERR_ENHANCE_YOUR_CALM);
|
||||
}
|
||||
else if (!(h2s->flags & H2_SF_HEADERS_SENT)) {
|
||||
/* Nothing was never sent for this stream, so reset with
|
||||
* REFUSED_STREAM error to let the client retry the
|
||||
* request.
|
||||
*/
|
||||
h2s_error(h2s, H2_ERR_REFUSED_STREAM);
|
||||
}
|
||||
|
||||
if (!(h2s->flags & H2_SF_RST_SENT) &&
|
||||
h2s_send_rst_stream(h2c, h2s) <= 0)
|
||||
@ -3142,6 +3149,13 @@ static void h2_do_shutw(struct h2s *h2s)
|
||||
h2c_error(h2c, H2_ERR_ENHANCE_YOUR_CALM);
|
||||
h2s_error(h2s, H2_ERR_ENHANCE_YOUR_CALM);
|
||||
}
|
||||
else {
|
||||
/* Nothing was never sent for this stream, so reset with
|
||||
* REFUSED_STREAM error to let the client retry the
|
||||
* request.
|
||||
*/
|
||||
h2s_error(h2s, H2_ERR_REFUSED_STREAM);
|
||||
}
|
||||
|
||||
if (!(h2s->flags & H2_SF_RST_SENT) &&
|
||||
h2s_send_rst_stream(h2c, h2s) <= 0)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user