Veronderstel ’n HTTP-antwoord verskyn in verskeie opgeneemde TCP-segmente nadat dit deur Squid gegaan het. Dit kan gewone TCP-gedrag wees, en nie ’n bewys dat die antwoord verkeerd verdeel is nie.

’n Voorspelende proxy het gewoonlik twee verbindings:

client ⇄ TCP connection A ⇄ proxy ⇄ TCP connection B ⇄ origin

Elke verbinding het sy eie TCP-toestand, volgordenommers en pakkettering. Die proxy kan data van die een verbinding lees en na die ander skryf sonder om die oorspronklike segmentgroottes te bewaar. Buffering, stuurtydsberekening, oorbelasting en die roete se groottelimiete kan ’n ander groepering lewer.

Drie grense wat apart gehou moet word

GrensWat dit bepaal
TCP-segmentDie vervoer- en netwerkroete
’n Socket-leesresultaatBeskikbare stroomgrepe en die oproeper se buffer
HTTP-boodskap of -raamDie HTTP-protokol se raamreëls

Een lees kan ’n deel van ’n kop, ’n volledige kop plus liggaamsgrepe, of data oor meer as een toepassingsvlakgrens bevat. TCP koppel nie “einde van HTTP-antwoord” aan die einde van ’n geslaagde lees nie.

’n HTTP/1.1-ontleder versamel dus koppe en gebruik die toepaslike liggaamsraamreëls, insluitend lengte, oordragkode of toegelate verbindingsluiting. ’n HTTP/2-raam is ’n protokolstruktuur wat self TCP-segmente kan kruis; dit is nie ’n ander naam vir ’n netwerkpakket nie.

’n Geslaagde CONNECT-tonnel bewaar die getonnelde greepstroom terwyl dit steeds twee TCP-pote gebruik. Sy segmentgrense kan verskil selfs wanneer die proxy nie die grepe binne die tonnel verander het nie.

Vergelyk weer saamgestelde toepassingsdata wanneer jy korrupsie ondersoek. Om pakkettellings te vergelyk of om dieselfde pakketlengtes aan beide kante te verwag, vra van TCP ’n grensgarantie wat dit nie bied nie.

Verwante artikels