Fix trailers without EOS flag to be a stream instead of connection error (#377)
[Trailers without EOS](https://httpwg.org/specs/rfc7540.html#HttpSequence): > An endpoint that receives a HEADERS frame without the END_STREAM flag set after receiving a final (non-informational) status code MUST treat the corresponding request or response as malformed (Section 8.1.2.6). [Malformed messages](https://httpwg.org/specs/rfc7540.html#malformed): > Malformed requests or responses that are detected MUST be treated as a stream error (Section 5.4.2) of type PROTOCOL_ERROR.
This commit is contained in:
@@ -204,9 +204,13 @@ where
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !frame.is_end_stream() {
|
if !frame.is_end_stream() {
|
||||||
// TODO: Is this the right error
|
// Receiving trailers that don't set EOS is a "malformed"
|
||||||
proto_err!(conn: "recv_headers: trailers frame was not EOS; stream={:?}", stream.id);
|
// message. Malformed messages are a stream error.
|
||||||
return Err(RecvError::Connection(Reason::PROTOCOL_ERROR));
|
proto_err!(stream: "recv_headers: trailers frame was not EOS; stream={:?}", stream.id);
|
||||||
|
return Err(RecvError::Stream {
|
||||||
|
id: stream.id,
|
||||||
|
reason: Reason::PROTOCOL_ERROR,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
actions.recv.recv_trailers(frame, stream)
|
actions.recv.recv_trailers(frame, stream)
|
||||||
|
|||||||
Reference in New Issue
Block a user