Sačuvajte međuspremljene podatke nakon odgovora HTTP CONNECT
Izbjegnite zaglavljeno rukovanje HTTP CONNECT pronalaženjem granice zaglavlja odgovora i čuvanjem bajtova koji stižu nakon nje.
Mali proxy omotač može raditi za HTTPS i zatim se zaglaviti kad se ponovno upotrijebi za protokol čiji poslužitelj govori prvi. Sumnjiv redak obično je onaj koji čeka da prijamni međuspremnik završi s \r\n\r\n.
TCP daje klijentu tok. Jedan prijamni poziv može vratiti pola HTTP retka stanja, potpun odgovor CONNECT ili taj odgovor odmah popraćen podacima tunela. Nema jamstva da se čitanje zaustavlja na kraju zaglavlja.
Pronađite granicu unutar međuspremnika
Za razmjenu HTTP/1.1 CONNECT skupljajte bajtove dok se završetak zaglavlja ne pojavi bilo gdje u međuspremniku. Podijelite na njegovu prvom pojavljivanju. Raščlanite redak stanja i zaglavlja iz prvog dijela; sve nakon granice sačuvajte odvojeno. Primijenite ograničenje veličine zaglavlja i vremensko ograničenje tijekom čekanja te prazno čitanje socketa tretirajte kao zatvorenu vezu, a ne kao još jedan poziv na petlju.
Konačni uspješni 2xx odgovor prebacuje vezu u način tunela odmah nakon tih zaglavlja. Bajtovi koji slijede već su bajtovi tunela. Nemojte ih odbaciti, nemojte čekati tijelo odgovora CONNECT i nemojte polje Content-Length tumačiti kao dopuštenje za trošenje dijela novog protokola. Informativni odgovori, ako postoje, moraju se obraditi prije tog konačnog odgovora.
Omotač mora proslijediti svoje ostatke
Vraćanje samo temeljnog socketa gubi sve bajtove koje je raščlanjivač rukovanja već izvukao iz njega. Sljedeći čitatelj treba međuspremljeni tok koji najprije daje spremljeni rep, a zatim nastavlja čitanja sa socketa. Za protokol u kojem poslužitelj govori prvi, gubitak tog početnog pozdrava može ostaviti obje strane da čekaju beskonačno.
Suprotno tome, bajtovi iz neuspjelog odgovora CONNECT nisu pozdrav tunela. 407 i dalje pripada proxy razmjeni i zahtijeva obradu autentikacije; drugi neuspješni status zahtijeva odgovarajući put pogreške.
To je posebno važno pri prilagodbi FTP ili SSH klijenta kroz HTTP proxy. Proxy također mora dopustiti traženi odredišni port, a FTP može trebati dodatne podatkovne veze. Ispravno raščlanjivanje zaglavlja rješava prijenos toka; ono ne može odobriti CONNECT ni osigurati drugi kanal FTP-a.