Skip to main content
0x0a

PROTOCOL_VIOLATION

RFC 9000 §20

QUIC PROTOCOL_VIOLATION (0x0a) is the catch-all for generic QUIC protocol violations that do not have a more specific error code. The peer did something not permitted by the QUIC specification that does not fit any named error category. This is the QUIC equivalent of HTTP/2 PROTOCOL_ERROR.

Code

0x0a

Decimal

10

Standard

RFC 9000 §20

Description

PROTOCOL_VIOLATION covers any QUIC behavior that violates the specification but does not have a dedicated error code. Examples: an endpoint sending a HANDSHAKE_DONE frame as a client (only servers may send this), sending a frame type that is prohibited in the current encryption level (e.g., a STREAM frame in a Handshake packet), or a server sending a NEW_TOKEN frame before the handshake is complete. Like HTTP/2's PROTOCOL_ERROR, QUIC's PROTOCOL_VIOLATION is the most general error code and catches all the edge cases that more specific codes do not address. When debugging a PROTOCOL_VIOLATION, the description string in the CONNECTION_CLOSE frame (if present) usually provides a more specific explanation. QUIC is stricter than HTTP/1.1 in protocol conformance. Many behaviors that HTTP/1.1 tolerates as quirks are protocol violations in QUIC.

Common Causes

  • Client sent a HANDSHAKE_DONE frame (server-only frame)
  • STREAM frame sent in a packet at the wrong encryption level
  • Server sent NEW_TOKEN before handshake completion
  • Frame type prohibited in the current connection state
  • Specific violation not covered by another error code