Behou gebufferde data ná 'n HTTP CONNECT-antwoord
Vermy 'n vasgehakte HTTP CONNECT-handdruk deur die grens van die antwoordkop te vind en die grepe wat daarna kom, te bewaar.
'n Klein proxy-omhulsel kan vir HTTPS werk en dan hang wanneer dit hergebruik word vir 'n protokol waar die bediener eerste praat. Die verdagte reël is dikwels dié een wat wag dat die ontvangsbuffer met \r\n\r\n moet eindig.
TCP gee die kliënt 'n stroom. Een ontvangsoproep kan die helfte van 'n HTTP-statusreël, 'n volledige CONNECT-antwoord, of daardie antwoord onmiddellik gevolg deur tonneldata terugstuur. Daar is geen belofte dat 'n lees by die einde van die koptekste stop nie.
Vind die grens binne die buffer
Vir 'n HTTP/1.1 CONNECT-uitruiling versamel jy grepe totdat die koptekstermineerder enige plek in die buffer verskyn. Verdeel by die eerste voorkoms daarvan. Ontleed die statusreël en koptekste uit die eerste deel; hou alles ná die grens afsonderlik. Pas 'n kopgrootte-limiet en 'n tydsperdatum toe terwyl jy wag, en behandel 'n leë socket-lees as 'n geslote verbinding eerder as 'n nuwe uitnodiging om te loop.
'n Finale suksesvolle 2xx-antwoord skakel die verbinding onmiddellik ná daardie koptekste na tonnelmodus. Sy nasleep-grepe is reeds tonnelgrepe. Moenie hulle weggooi nie, wag vir 'n CONNECT-antwoordliggaam, of interpreteer 'n Content-Length-veld as toestemming om 'n deel van die nuwe protokol te verbruik nie. Informasie-antwoorde, indien teenwoordig, moet voor daardie finale antwoord hanteer word.
Die omhulsel moet sy oorskot deurgee
Om net die onderliggende socket terug te gee, verloor enige grepe wat die handdruk-ontleder al daaruit getrek het. Die volgende leser het 'n gebufferde stroom nodig wat eers die gestoorde stert lewer en dan socket-lees hervat. Vir 'n bediener-eerste protokol kan die verlies van daardie aanvanklike groet albei kante onbepaald laat wag.
Omgekeerd is grepe van 'n mislukte CONNECT-antwoord nie 'n tonnelgroet nie. 'n 407 behoort steeds aan die proxy-uitruiling en benodig stawinghantering; 'n ander nie-suksesstatus benodig 'n gepaste foutpad.
Dit maak veral saak wanneer 'n FTP- of SSH-kliënt deur 'n HTTP-proxy aangepas word. Die proxy moet ook die versoekte bestemmingspoort toelaat, en FTP kan bykomende dataverbindings nodig hê. Korrekte koptekstontleding los die stroomoorhandiging op; dit kan nie CONNECT-toestemming verleen of FTP se tweede kanaal verskaf nie.