Nakikita ng kliyente ang 200 Connection Established, sinisimulan ang TLS at agad na nag-uulat ng walang saysay kung saan dapat may TLS record. Maghanap ng hindi pa tapos na tugon ng HTTP bago sisihin ang mga setting ng cipher ng destinasyon.

Sa palitan ng HTTP/1 CONNECT, ang linya ng status ay simula lamang ng tugon. Maaaring sumunod ang mga field ng header. Ang blangkong linyang nagtatapos sa seksyon ng header ang naghuhudyat ng paglipat sa tunnel pagkatapos ng matagumpay na tugon ng CONNECT.

HTTP/1.1 200 Connection Established\r\n
Proxy-Agent: example\r\n
\r\n

Maaaring dumating ang mga byte na iyon sa isang pagbasa, sa maraming pagbasa, o sa pagbasang may kasama pang kasunod na byte. Hindi pinapanatili ng TCP ang mga hangganan ng pagsulat ng server.

Gawing tahasang estado ng parser ang paglipat

  1. Kolektahin at i-parse ang linya ng status. Gamitin ang numerikong status sa halip na eksaktong Ingles na pariralang dahilan.
  2. Magpatuloy hanggang dumating ang buong terminator ng seksyon ng header. Hindi ginagawang mawala ng matagumpay na linya ng status ang natitirang mga field.
  3. Sa matagumpay na tugon ng CONNECT, ituring ang byte kaagad pagkatapos ng terminator na iyon bilang simula ng datos ng tunnel. Sa ibang mga tugon, sundin ang naaangkop na paghawak ng tugon ng HTTP at pagpapatotoo.
  4. Ilipat ang koneksyon at anumang hindi pa nagamit na byte sa pamamagitan ng buffered na I/O interface na sinusuportahan ng susunod na protocol.

Mahalaga ang huling hakbang kahit may magandang paghahanap ng delimiter. Maaaring mas marami pang socket ang nagamit ng buffered na reader kaysa hiniling ng parser. Ang pagsisimula ng TLS sa hubad na socket habang iniiwan ang reader na iyon ay maaaring mag-iwan ng byte sa pribadong buffer ng reader.

Gumamit ng deadline sa pag-setup at limitasyon sa laki ng header. Ang EOF bago ang terminator ay hindi kumpletong tugon ng proxy, hindi paanyaya na maghintay magpakailanman o subukan pa rin ang TLS.

Isipin ang maraming hangganan

Isipin ang isang pagbasang nagtatapos pagkatapos ng Proxy-Agent:. Kailangan pa ng parser ng karagdagang byte ng header ng HTTP. Isipin ang isa pang nagtatapos sa gitna ng huling pagkakasunod-sunod ng CRLF. Hindi pa iyon buong seksyon ng header. Ngayon isipin ang buong matagumpay na seksyon ng header na sinusundan ng mga byte ng tunnel sa parehong buffer: ang mga dagdag na byte na iyon ay dapat makalampas sa paglipat.

Ang 407 ay ibang kinalabasan. Nangangailangan ito ng paghawak ng pagpapatotoo; hindi nito pinapayagan ang TLS ClientHello papasok sa tunnel na hindi kailanman binuksan.

Piliin ang connector na may pagpapanatili maliban kung ang pagpapatupad ng handshake mismo ang gawain. Ang hangganang ito ay partikular sa palitan ng HTTP/1 na ipinakita rito. Ang proxy ng HTTP/2 ay may dalang CONNECT sa stream na may ibang framing.

Kaugnay na mga artikulo