advanced25 min studyLesson 204 in Engineering

HTTP/3 maps requests onto QUIC streams without erasing dependencies

Trace request streams, QUIC receive limits, control streams, and QPACK dependencies while distinguishing independent ordering from independent resources.

On this page

What you’ll understand

  • Explain how HTTP/3 request streams differ from HTTP/2 frames over TCP.
  • Distinguish QUIC stream limits, stream credit, and connection credit.
  • Identify QPACK and application dependencies that can still delay useful work.

HTTP semantics can stay familiar while their transport mapping changes. HTTP/3 places request-response exchanges on QUIC streams, removing the single TCP byte-order dependency between independent request streams. That precise improvement does not imply that every request owns separate capacity or that headers are always immediately usable. Follow the request stream, its control dependencies, and the receiver's two credit scopes before making a claim about what multiplexing guarantees.

An exchange has a request stream and supporting connection state

A client-initiated bidirectional QUIC stream carries one HTTP/3 request and its response. HTTP/3 frames structure content inside that stream; QUIC packets can carry ranges from multiple streams. Separately, unidirectional streams carry connection control and QPACK instructions. Creating a request stream therefore depends on both usable transport state and the application's HTTP/3 rules. A bidirectional stream is not two unrelated requests: its directions are the request and response sides of the exchange. Unsupported frame placement, missing required control behavior, and invalid message sequencing still produce protocol errors despite reliable transport.

A lost range in request stream A need not prevent contiguous data for independent stream B from reaching its application. A remains ordered within its own stream, and a lost packet containing ranges for both can affect both. Congestion control, endpoint processing, bandwidth, and connection-level flow control remain shared. These distinctions matter when comparing HTTP/2 and HTTP/3: measure request completion under stated loss and dependency conditions, not merely whether the connection supports many streams. A change in transport mapping can remove one critical-path edge while leaving the final useful completion time unchanged for a dependent application.

Tready,B≥max⁡(Tcontiguous,B,Trequired dependency,B)T_{\rm ready,B}\geq\max(T_{\rm contiguous,B},T_{\rm required\ dependency,B})
All terms are event times in seconds on one timeline. Independent QUIC stream ordering can remove a dependency on another stream's missing bytes, but a required header or application dependency can still bound readiness.↔ Scroll wide equations horizontally.

QUIC credit counts stream offsets and aggregate consumption

QUIC uses stream-level and connection-level flow-control limits. These are cumulative permitted byte positions or totals, rather than HTTP/2's decrement-and-replenish DATA windows. A sender's new stream data must respect the stream's limit and the remaining connection allowance; retransmitting the same stream positions does not consume new flow-control credit as if they were new bytes. Stream-count limits separately govern how many streams can be created. Do not compare an HTTP/3 frame's useful body length directly with all QUIC accounting without considering the other bytes carried on that stream and the highest offsets already sent.

Supporting streams also need enough permission and processing to avoid deadlock. A receiver that stops reading control or compression instructions can delay application messages even when the network remains usable. Transport connection credit constrains aggregate new stream data, so one poorly managed consumer can affect others. On cancellation, reset and stop-sending mechanisms have distinct directional meanings, and final sizes remain relevant to flow-control accounting. A canceled request is not permission to forget all previously committed receive-space obligations or to assume that the server never performed its application effect. State transitions and business outcomes require separate evidence.

ΔBnew≤min⁡(Ls−Hs, Lc−Uc)\Delta B_{\rm new}\leq\min(L_s-H_s,\,L_c-U_c)
In a simplified contiguous-send snapshot, L_s is the stream's permitted offset, H_s its previous highest sent offset, L_c the connection limit, and U_c already-used aggregate flow-control bytes. All are bytes; sparse offsets, final sizes, and reset accounting need the full QUIC rules.↔ Scroll wide equations horizontally.

Compression can create an explicit dependency

QPACK lets HTTP/3 use compressed field sections while controlling dependence on dynamic-table instructions delivered separately. A field section can reference an entry that the decoder has not yet received, so the affected stream may block within negotiated bounds. This is not the old TCP-wide delivery dependency, but it is still real waiting. Static references or literal fields make different size-versus-dependency tradeoffs. A measurement should identify whether delay came from missing request-stream bytes, missing encoder instructions, an application dependency, or shared congestion rather than labeling all of them generic head-of-line blocking.

The probability lab illustrates an independent-piece assumption, not HTTP/3 scheduling. Reset, explicitly set BOTH p=0.9 and n=2, predict the chance of all pieces arriving, then Play or Step. Reset and re-set BOTH p=0.9 and n=10 for comparison. The exact binomial bars count successes without stream identities, packet co-location, recovery, or correlated loss. They show why an operation requiring many pieces has a different completeness probability from one requiring few. Use the worked credit ledger and an actual dependency timeline, rather than these bars, to decide whether a particular HTTP/3 request can progress.

Two cumulative limits bound new bytes

Assume a contiguous-send QUIC stream has permitted offset 12,000 and has sent through offset 8,000 exclusive. The connection allows 40,000 aggregate flow-control bytes and has used 38,500. Ignore other limits and resets.

  1. The stream has 12,000−8,000=4,000 bytes of additional offset allowance.

  2. The connection has 40,000−38,500=1,500 aggregate new-byte allowance. Therefore this stream can add at most 1,500 bytes in the simplified snapshot.

  3. Retransmitting an already sent 1,000-byte range does not use another 1,000 new flow-control bytes. It still consumes transport capacity and is subject to congestion control and recovery rules.

The result

Connection allowance binds at 1,500 new bytes. Reliable retransmission, receive credit, and physical service are different budgets.

Explore the model

Interactive lab

Interactive lab · probability

Completeness is not stream isolation

Reset, set BOTH p=0.9 and n=2, predict the all-success bar, then Play or Step. Reset and re-set BOTH p=0.9 and n=10 for comparison. These exact independent piece counts contain no QUIC streams, recovery, packet co-location, QPACK, or congestion; playback highlights outcomes rather than sampling them.

Completeness is not stream isolationThese are exact binomial probabilities for independent trials with one fixed success probability. Playback tours the distribution; it does not resample outcomes. Current readings: Mean · np: 5; Variance · np(1−p): 2.5; Total probability: 1. All parameters are adjustable with the labeled controls below.03581000.070.150.220.3Successes kP(X = k)k = 0 · P = 9.77e-4
Exact probabilityHighlighted outcomeMean np
Mean · np
5
Variance · np(1−p)
2.5
Total probability
1
t = 0 s

These are exact binomial probabilities for independent trials with one fixed success probability. Playback tours the distribution; it does not resample outcomes. Parameter changes pause playback and recompute the model at the current elapsed time. Reset restores both parameters and returns time to zero. Playback starts paused. Adjust either parameter, then choose Play or Step.

Look forRequiring more pieces changes completeness under this model; the model cannot establish which independent HTTP/3 stream is blocked.

Check your understanding

Why can an HTTP/3 response still wait even when its request-stream bytes have arrived contiguously?

Try it yourself

A contiguous stream has L_s=10,000 and H_s=9,000 bytes. Connection allowance is L_c=25,000 and used total U_c=22,000. How much new stream data fits, and would retransmitting 500 earlier bytes change that allowance?

Take a moment to make a prediction or work it out on paper. Open a hint when you need one.

Give me a hint

Compute both differences, then distinguish new offsets from another transmission of the same offsets.

Compare with the solution

Stream allowance is 1,000 bytes and connection allowance is 3,000, so at most 1,000 new bytes fit under these assumptions. Retransmitting the earlier 500 bytes does not consume new flow-control allowance, although it consumes bandwidth and congestion-controlled sending opportunity.

Take it with you

  • HTTP/3 request streams remove a specific cross-request transport ordering dependency.
  • QUIC stream counts and cumulative byte limits constrain different state.
  • QPACK, shared capacity, and application logic can still delay readiness.

Read further

Original sources and deeper explanations to follow at your own pace.

Optional progress, saved in this browser when available. Revisit any lesson at any time.

Lesson not marked complete.