Konservi bufritajn datumojn post HTTP CONNECT-respondo
Evitu ŝtopitan HTTP CONNECT-intermanon trovante la limon de la respondaj kaplinioj kaj konservante la bajtojn venantajn post ĝi.
Malgranda proksea envolvilo povas funkcii por HTTPS kaj tiam ŝtopiĝi kiam ĝi reuziĝas por protokolo en kiu la servilo parolas unue. La suspekta linio ofte estas tiu, kiu atendas ke la riceva bufro finiĝu per \r\n\r\n.
TCP donas al la kliento fluon. Unu riceva alvoko povas redoni duonan HTTP-statakan linion, kompletan CONNECT-respondon, aŭ tiun respondon tuj sekvatan de tunelaj datumoj. Ne ekzistas promeso, ke legado haltos ĉe la fino de la kaplinioj.
Trovu la limon ene de la bufro
Por HTTP/1.1 CONNECT-interŝanĝo, akumulu bajtojn ĝis la kaplinia finilo aperos ie ajn en la bufro. Disigu ĉe ĝia unua apero. Analizu la statakan linion kaj kapliniojn el la unua parto; konservu aparte ĉion post la limo. Apliku kaplinian grandlimon kaj tempolimon dum vi atendas, kaj traktu malplenan soketan legadon kiel fermitan konekton, ne kiel novan inviton al buklo.
Fina sukcesa 2xx-respondo ŝaltas la konekton en tunelan reĝimon tuj post tiuj kaplinioj. Ĝiaj sekvaj bajtoj jam estas tunelaj bajtoj. Ne forĵetu ilin, ne atendu CONNECT-respondan korpon, kaj ne interpretu kampon Content-Length kiel permeson konsumi parton de la nova protokolo. Informaj respondoj, se ĉeestas, devas esti traktataj antaŭ tiu fina respono.
La envolvilo devas transdoni siajn restaĵojn
Redoni nur la suban soketon perdas ĉiujn bajtojn, kiujn la intermana analizilo jam eltiris el ĝi. La sekva leganto bezonas bufritan fluon, kiu unue liveras la konservitan voston kaj poste rekomencas soketajn legadojn. Ĉe servilo-unua protokolo, perdi tiun komencan saluton povas lasi ambaŭ flankojn atendi senfine.
Male, bajtoj el malsukcesa CONNECT-respondo ne estas tunela saluto. 407 ankoraŭ apartenas al la proksea interŝanĝo kaj bezonas aŭtentigan traktadon; alia nesukcesa statuso bezonas taŭgan eraran vojon.
Tio gravas precipe kiam oni adaptas FTP- aŭ SSH-klienton tra HTTP-prokseo. La prokseo ankaŭ devas permesi la petitan celan pordon, kaj FTP eble bezonas pliajn datumajn konektojn. Ĝusta kaplinia analizo solvas la fluan transdonon; ĝi ne povas doni CONNECT-permeson aŭ provizi la duan kanalon de FTP.