The response says the body is chunked.

highlighted = computed this step

Transfer-Encoding says chunked

The response header says chunked, so the body is read as chunk rows.

Transfer-Encoding=chunked\text{Transfer-Encoding}=\text{chunked}
Transfer-EncodingThe request, chunked response headers, chunk rows, decoded body, and checks are recomputed from pinned bytes.Transfer-Encoding - GET /stream chunks decode to hi! (3 bytes)sectionnamevaluecheckrequest linemethodGETparsedrequest linepath/streamparsedrequest lineversionHTTP/1.1parsedheaderHostapi.exampleexactstatusversionHTTP/1.1parsedstatusstatus200 OKokheaderTransfer-EncodingchunkedchunkedheaderContent-Lengthabsentnot usedchunk 1size token2hex sizechunk 1decimal size2convertedchunk 1data displayhisafe display formchunk 1data hex6869pinned byteschunk 1roledatastream partchunk 2size token1hex sizechunk 2decimal size1convertedchunk 2data displayexclamation marksafe display formchunk 2data hex21pinned byteschunk 2roledatastream partchunk 3size token0hex sizechunk 3decimal size0convertedchunk 3data displayend markersafe display formchunk 3data hexno datapinned byteschunk 3roleendstream partdecoded bodydisplayhi!safe display formdecoded bodyexact hex686921pinned bytesdecoded bodybyte length3countedcheckfirst chunk bytes2chunk sizechecksecond chunk bytes1chunk sizecheckdecoded body bytes3sumcheckzero chunk endsyesterminatorcheckContent-Lengthabsentabsent

Content-Length is absent

The table explicitly checks that Content-Length is absent in this toy response.

Content-Length absent\text{Content-Length absent}
Transfer-EncodingThe request, chunked response headers, chunk rows, decoded body, and checks are recomputed from pinned bytes.Transfer-Encoding - GET /stream chunks decode to hi! (3 bytes)sectionnamevaluecheckrequest linemethodGETparsedrequest linepath/streamparsedrequest lineversionHTTP/1.1parsedheaderHostapi.exampleexactstatusversionHTTP/1.1parsedstatusstatus200 OKokheaderTransfer-EncodingchunkedchunkedheaderContent-Lengthabsentnot usedchunk 1size token2hex sizechunk 1decimal size2convertedchunk 1data displayhisafe display formchunk 1data hex6869pinned byteschunk 1roledatastream partchunk 2size token1hex sizechunk 2decimal size1convertedchunk 2data displayexclamation marksafe display formchunk 2data hex21pinned byteschunk 2roledatastream partchunk 3size token0hex sizechunk 3decimal size0convertedchunk 3data displayend markersafe display formchunk 3data hexno datapinned byteschunk 3roleendstream partdecoded bodydisplayhi!safe display formdecoded bodyexact hex686921pinned bytesdecoded bodybyte length3countedcheckfirst chunk bytes2chunk sizechecksecond chunk bytes1chunk sizecheckdecoded body bytes3sumcheckzero chunk endsyesterminatorcheckContent-Lengthabsentabsent

The chunks carry the body length

Each chunk row carries its own size before its data bytes.

sizes are in chunk rows\text{sizes are in chunk rows}
Transfer-EncodingThe request, chunked response headers, chunk rows, decoded body, and checks are recomputed from pinned bytes.Transfer-Encoding - GET /stream chunks decode to hi! (3 bytes)sectionnamevaluecheckrequest linemethodGETparsedrequest linepath/streamparsedrequest lineversionHTTP/1.1parsedheaderHostapi.exampleexactstatusversionHTTP/1.1parsedstatusstatus200 OKokheaderTransfer-EncodingchunkedchunkedheaderContent-Lengthabsentnot usedchunk 1size token2hex sizechunk 1decimal size2convertedchunk 1data displayhisafe display formchunk 1data hex6869pinned byteschunk 1roledatastream partchunk 2size token1hex sizechunk 2decimal size1convertedchunk 2data displayexclamation marksafe display formchunk 2data hex21pinned byteschunk 2roledatastream partchunk 3size token0hex sizechunk 3decimal size0convertedchunk 3data displayend markersafe display formchunk 3data hexno datapinned byteschunk 3roleendstream partdecoded bodydisplayhi!safe display formdecoded bodyexact hex686921pinned bytesdecoded bodybyte length3countedcheckfirst chunk bytes2chunk sizechecksecond chunk bytes1chunk sizecheckdecoded body bytes3sumcheckzero chunk endsyesterminatorcheckContent-Lengthabsentabsent

Summary

Chunked transfer replaces one body length header with size lines inside the body.

chunked header checked\text{chunked header checked}
Transfer-EncodingThe request, chunked response headers, chunk rows, decoded body, and checks are recomputed from pinned bytes.Transfer-Encoding - GET /stream chunks decode to hi! (3 bytes)sectionnamevaluecheckrequest linemethodGETparsedrequest linepath/streamparsedrequest lineversionHTTP/1.1parsedheaderHostapi.exampleexactstatusversionHTTP/1.1parsedstatusstatus200 OKokheaderTransfer-EncodingchunkedchunkedheaderContent-Lengthabsentnot usedchunk 1size token2hex sizechunk 1decimal size2convertedchunk 1data displayhisafe display formchunk 1data hex6869pinned byteschunk 1roledatastream partchunk 2size token1hex sizechunk 2decimal size1convertedchunk 2data displayexclamation marksafe display formchunk 2data hex21pinned byteschunk 2roledatastream partchunk 3size token0hex sizechunk 3decimal size0convertedchunk 3data displayend markersafe display formchunk 3data hexno datapinned byteschunk 3roleendstream partdecoded bodydisplayhi!safe display formdecoded bodyexact hex686921pinned bytesdecoded bodybyte length3countedcheckfirst chunk bytes2chunk sizechecksecond chunk bytes1chunk sizecheckdecoded body bytes3sumcheckzero chunk endsyesterminatorcheckContent-Lengthabsentabsent