mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-05-04 20:46:11 +02:00
MEDIUM: h2: skip the response trailers if any
For now we don't build a HEADERS frame with them, but at least we remove them from the response so that the L7 chunk parser inside isn't blocked on these (often two) remaining bytes that don't want to leave the buffer. It also ensures that trailers delivered progressively will correctly be skipped.
This commit is contained in:
parent
c652dbde9d
commit
9d89ac8f42
21
src/mux_h2.c
21
src/mux_h2.c
@ -2300,9 +2300,10 @@ static int h2s_frt_make_resp_data(struct h2s *h2s, struct buffer *buf)
|
||||
h2s->st = H2_SS_HLOC;
|
||||
else
|
||||
h2s->st = H2_SS_CLOSED;
|
||||
/* no trailers for now, we must consume them (whatever remains in the buffer) */
|
||||
bo_del(buf, buf->o);
|
||||
h1m->state = HTTP_MSG_DONE;
|
||||
|
||||
if (!(h1m->flags & H1_MF_CHNK))
|
||||
h1m->state = HTTP_MSG_DONE;
|
||||
|
||||
h2s->flags |= H2_SF_ES_SENT;
|
||||
}
|
||||
|
||||
@ -2337,6 +2338,20 @@ static int h2_snd_buf(struct conn_stream *cs, struct buffer *buf, int flags)
|
||||
if (h2s->flags & H2_SF_BLK_ANY)
|
||||
break;
|
||||
}
|
||||
else if (h2s->res.state == HTTP_MSG_TRAILERS) {
|
||||
/* consume the trailers if any (we don't forward them for now) */
|
||||
int count = h1_measure_trailers(buf);
|
||||
|
||||
if (unlikely(count <= 0)) {
|
||||
if (count < 0)
|
||||
h2s_error(h2s, H2_ERR_INTERNAL_ERROR);
|
||||
break;
|
||||
}
|
||||
total += count;
|
||||
bo_del(buf, count);
|
||||
h2s->res.state = HTTP_MSG_DONE;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
cs->flags |= CS_FL_ERROR;
|
||||
break;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user