target = "https://www.rfc-editor.org/rfc/rfc9000#section-2.2" # 2.2. Sending and Receiving Data # # STREAM frames (Section 19.8) encapsulate data sent by an application. # An endpoint uses the Stream ID and Offset fields in STREAM frames to # place data in order. # # Endpoints MUST be able to deliver stream data to an application as an # ordered byte stream. Delivering an ordered byte stream requires that # an endpoint buffer any data that is received out of order, up to the # advertised flow control limit. # # QUIC makes no specific allowances for delivery of stream data out of # order. However, implementations MAY choose to offer the ability to # deliver data out of order to a receiving application. # # An endpoint could receive data for a stream at the same stream offset # multiple times. Data that has already been received can be # discarded. The data at a given offset MUST NOT change if it is sent # multiple times; an endpoint MAY treat receipt of different data at # the same offset within a stream as a connection error of type # PROTOCOL_VIOLATION. # # Streams are an ordered byte-stream abstraction with no other # structure visible to QUIC. STREAM frame boundaries are not expected # to be preserved when data is transmitted, retransmitted after packet # loss, or delivered to the application at a receiver. # # An endpoint MUST NOT send data on any stream without ensuring that it # is within the flow control limits set by its peer. Flow control is # described in detail in Section 4. [[spec]] level = "MUST" quote = ''' Endpoints MUST be able to deliver stream data to an application as an ordered byte stream. ''' [[spec]] level = "MAY" quote = ''' However, implementations MAY choose to offer the ability to deliver data out of order to a receiving application. ''' [[spec]] level = "MUST" quote = ''' The data at a given offset MUST NOT change if it is sent multiple times; an endpoint MAY treat receipt of different data at the same offset within a stream as a connection error of type PROTOCOL_VIOLATION. ''' [[spec]] level = "MUST" quote = ''' An endpoint MUST NOT send data on any stream without ensuring that it is within the flow control limits set by its peer. '''