Hello,

I have read HTTP/3 specification and I do not find any requirement on
setting the FIN bit of a QUIC STREAM frame which contains a H3 HEADERS
if the request does not have a body.

For me, it represents an ambiguity on the internal HTTP message
representation. If no content-length header is present, it could be
interpreted as equivalent to HTTP/1.1 chunked transfer encoding. This
ambiguity could be removed by requiring the STREAM FIN bit set for the
frame containing H3 HEADERS if no body is present. If instead it's
preferable to maintain a separation between HTTP/3 and QUIC, maybe a new
H3 internal mechanism could be implemented to signal the end of a stream
without a body.

I think this issue is particularly important for intermediaries, such as
haproxy. Currently, when receiving a H3 HEADERS frame from a client
without the underlying STREAM FIN bit set, we generate for the server a
HTTP/1.1 message with a chunked transfer encoding body. This is to
ensure that we do not discard any possible arriving H3 DATA frames
after. However, a lot of HTTP servers are stricter with the presence of
a body and will for example reject GET requests with a chunked transfer
encoding.

Please let me know your thoughts on the subject,
Regards,

-- 
Amaury Denoyelle

Reply via email to