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

  1. Mblidhni dhe analizoni rreshtin e statusit. Përdorni statusin numerik në vend të një fraze të saktë arsyeje në anglisht.
  2. 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.
  3. 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.
  4. 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.

Artikuj të ngjashëm