h-data-before-headers
· RFC 9114 §4.1 · correctness · layer http3 · udp/4491 · MUST
Passing this means: Rejected something invalid, with the code the RFC names.
Anomaly type: response_stream
How each client answered
| Client | Version | Verdict | What happened |
|---|---|---|---|
| curl | libcurl/8.23.0 ngtcp2/1.25.0 | Fail | Objected at the QUIC layer (rejected at the QUIC layer with INTERNAL_ERROR) instead of signalling the HTTP/3 error. The violation was detected and rejected, which is the right instinct; §8.1 requires an HTTP/3 connection error to be carried in an application close, and this test names 0x105. A transport close carries no HTTP/3 code at all, so a peer has no way to learn what was wrong. |
| quinn | noq fork (189b0ed) | Pass | Rejected with the required error code 0x105. |
| aioquic | 1.3.0 (PyPI wheel) | Pass | Rejected with the required error code 0x105. |
| chromium | build 1248 | Pass | Rejected with the required error code 0x105. |
| quic-go | quic-go v0.61.0 (h1:9So2anK4Tp22) | Pass | Rejected with the required error code 0x105. |
| quiche | 0.30.0 (1c8e976) | Fail | Accepted a protocol violation and carried on. The anomaly was in the response the client read and delivered, so it was seen; this should have been rejected. |
| neqo | 0.31.1 (cac2b74) | Pass | Rejected with the required error code 0x105. |
| picoquic | 8162550 | Pass | Rejected with the required error code 0x105. |
| ngtcp2 | 3c23148 | Pass | Rejected with the required error code 0x105. |
| lsquic | 4.9.4 (2b30189) | Pass | Rejected with the required error code 0x105. |
| xquic | 2060a44 | Inconclusive | The client completed its request and then answered nothing at all — neither a close nor an acknowledgement of the PING sent to elicit one. So this says less than the case above it: the server cannot show the question was even received, and a client that exited without closing looks from here exactly like one that read the anomaly and carried on. Reported separately rather than as silence from a live peer, which is a stronger claim than the run supports. |
| msquic | 2.7.0 (7e6525d) | Fail | Rejected, but with error 0x102 where the specification requires 0x105. The violation was detected; the code reported is wrong. |
| quico | 0.7.0 (npm) | Pass | Rejected with the required error code 0x105. |
What the clause requires
Close the connection with H3_FRAME_UNEXPECTED. A response begins with a field section, and §4.1 makes "receipt of an invalid sequence of frames" a connection error of that type — a body arriving before the headers that describe it is exactly that.
Judged against RFC 9114.
Run this one yourself
Every test is reachable from your own client. Nothing here needs an account.
curl -s https://conformance.pqcrypta.com/catalog.json \
| jq '.tests[] | select(.id == "h-data-before-headers")'