Säilita puhverdatud andmed pärast HTTP CONNECT vastust
Vältige takerdunud HTTP CONNECT kätlust, leides vastuse päiste piiri ja säilitades pärast seda saabuvad baidid.
Väike puhverserveri ümbris võib HTTPS-i jaoks töötada ja seejärel takerduda, kui seda korduvalt kasutatakse protokolli puhul, kus server räägib esimesena. Kahtlane rida on sageli see, mis ootab, et vastuvõtupuhver lõpeks \r\n\r\n-ga.
TCP annab kliendile voo. Üks vastuvõtukutse võib tagastada poole HTTP olekurireast, täieliku CONNECT-vastuse või selle vastuse kohe järgnevate tunnelandmetega. Pole mingit lubadust, et lugemine peatub päiste lõpus.
Leidke piir puhvri sees
HTTP/1.1 CONNECT vahetuse korral koguge baite, kuni päise lõpetaja ilmub puhvris ükskõik kuhu. Jagage selle esimesel esinemisel. Jäsendage olekurida ja päised esimesest osast; hoidke kõik pärast piiri eraldi. Rakendage ootamise ajal päise suuruse piirangut ja ajalõppu ning käsitlege tühja soketi lugemist suletud ühendusena, mitte uue kutse korrata tsüklit.
Lõplik edukas 2xx vastus lülitab ühenduse tunnelirežiimi kohe pärast neid päise. Selle järgnevad baidid on juba tunnelibaidid. Ärge visake neid ära, ärge oodake CONNECT-vastuse keha ega tõlgendage Content-Length välja lubana tarbida osa uuest protokollist. Teabevastused, kui neid on, tuleb töödelda enne seda lõplikku vastust.
Ümbris peab oma jäägid edasi andma
Ainult alumise soketi tagastamine kaotab kõik baidid, mille kätlusparsija on sellest juba välja tõmmanud. Järgmine lugeja vajab puhverdatud voogu, mis annab kõigepealt salvestatud saba ja seejärel jätkab soketi lugemist. Server-esimesena protokollis võib selle esmase tervituse kaotamine jätta mõlemad pooled lõputult ootama.
Vastupidi, ebaõnnestunud CONNECT-vastuse baidid ei ole tunnelitervitus. 407 kuulub endiselt puhverserveri vahetusse ja vajab autentimise käsitlemist; muu ebaõnnestunud olek vajab sobivat veateed.
See on eriti oluline FTP- või SSH-kliendi kohandamisel HTTP-puhverserveri kaudu. Puhverserver peab lubama ka taotletud sihtporti ning FTP võib vajada täiendavaid andmeühendusi. Õige päiste parsimine lahendab voo üleandmise; see ei saa anda CONNECT-luba ega pakkuda FTP teist kanalit.