Prisni rreshtin bosh pas CONNECT
Lexoni përgjigjen e plotë HTTP/1 CONNECT përpara se t'ia dorëzoni socket-in TLS-it, edhe kur rreshti i statusit vjen i pari.
Klienti sheh 200 Connection Established, nis TLS dhe menjëherë raporton marrëzi atje ku duhet të ishte një regjistrim TLS. Kërkoni një përgjigje HTTP të papërfunduar përpara se të fajësoni cilësimet e kriptimit të destinacionit.
Në një shkëmbim HTTP/1 CONNECT, rreshti i statusit është vetëm fillimi i përgjigjes. Pas tij mund të vijnë fusha të kokës. Rreshti bosh që mbyll seksionin e kokës shënon kalimin në tunel pas një përgjigjeje CONNECT të suksesshme.
HTTP/1.1 200 Connection Established\r\n
Proxy-Agent: example\r\n
\r\n
Këta bajtë mund të vijnë në një lexim, në disa lexime ose në një lexim që përmban edhe bajtët pasues. TCP nuk i ruan kufijtë e shkrimit të serverit.
Bëjeni dorëzimin një gjendje të qartë të parser-it
- Mblidhni dhe analizoni rreshtin e statusit. Përdorni statusin numerik në vend të një fraze të saktë arsyeje në anglisht.
- Vazhdoni derisa të ketë ardhur terminatori i plotë i seksionit të kokës. Një rresht statusi i suksesshëm nuk i bën fushat e mbetura të zhduken.
- Për një përgjigje CONNECT të suksesshme, konsideroni bajtin menjëherë pas atij terminatori si fillimin e të dhënave të tunelit. Për përgjigjet e tjera, ndiqni trajtimin përkatës të përgjigjes HTTP dhe vërtetimit.
- Transferoni lidhjen dhe çdo bajt të papërdorur përmes ndërfaqes I/O me bufer që mbështet protokolli tjetër.
Hapi i fundit ka rëndësi edhe me një kërkim të mirë të kufizuesit. Një lexues me bufer mund të ketë konsumuar më shumë nga socket-i sesa kërkoi parser-i. Fillimi i TLS-it në socket-in e zhveshur duke braktisur atë lexues mund t'i lërë bajtët në buferin privat të lexuesit.
Përdorni një afat për konfigurimin dhe një kufi për madhësinë e kokës. Një EOF përpara terminatorit është një përgjigje proxy e paplotë, jo një ftesë për të pritur përgjithmonë ose për të provuar TLS gjithsesi.
Mendoni disa kufij
Imagjinoni një lexim që mbaron pas Proxy-Agent:. Parser-it i duhen ende bajtë koke HTTP. Imagjinoni një tjetër që mbaron në mes të sekuencës së fundit CRLF. Kjo nuk është ende një seksion i plotë i kokës. Tani imagjinoni një seksion koke të plotë e të suksesshëm të ndjekur nga bajtë tuneli në të njëjtin bufer: ata bajtë shtesë duhet t'i mbijetojnë dorëzimit.
407 është një përfundim tjetër. Kërkon trajtim vërtetimi; nuk lejon një TLS ClientHello në një tunel që nuk u hap kurrë.
Preferoni një lidhës të mirëmbajtur, përveç nëse zbatimi i shtrëngimit të duarve është vetë detyra. Ky kufi është specifik për shkëmbimin HTTP/1 të treguar këtu. Një proxy HTTP/2 e mban CONNECT në një rrjedhë me kornizim tjetër.