Odjemalec vidi 200 Connection Established, zažene TLS in takoj poroča neumnosti tam, kjer bi moral biti zapis TLS. Iščite nedokončan odgovor HTTP, preden okrivite nastavitve šifriranja cilja.

Pri izmenjavi HTTP/1 CONNECT je statusna vrstica le začetek odgovora. Sledijo lahko polja glave. Prazna vrstica, ki zaključi razdelek glave, označuje prehod v tunel po uspešnem odgovoru CONNECT.

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

Ti bajti lahko prispejo v enem branju, v več branjih ali v branju, ki vsebuje tudi naslednje bajte. TCP ne ohranja pisalnih meja strežnika.

Naj bo predaja izrecno stanje razčlenjevalnika

  1. Zberite in razčlenite statusno vrstico. Uporabite številčno stanje namesto natančne angleške fraze razloga.
  2. Nadaljujte, dokler ne prispe popoln zaključek razdelka glave. Uspešna statusna vrstica ne povzroči, da bi preostala polja izginila.
  3. Pri uspešnem odgovoru CONNECT štejte bajt takoj za tem zaključkom za začetek podatkov tunela. Pri drugih odgovorih sledite ustreznemu ravnanju z odgovorom HTTP in preverjanjem pristnosti.
  4. Predajte povezavo in vse neporabljene bajte prek medpomnilniškega vmesnika I/O, ki ga podpira naslednji protokol.

Zadnji korak je pomemben tudi pri dobrem iskanju ločila. Medpomnilniški bralnik je lahko porabil več socket-a, kot je razčlenjevalnik zahteval. Če zaženete TLS na goli povezavi in ta bralnik opustite, lahko bajti obtičijo v zasebnem medpomnilniku bralnika.

Uporabite rok za vzpostavitev in omejitev velikosti glave. EOF pred zaključkom je nepopoln odgovor proxyja, ne vabilo k večnemu čakanju ali poskusu TLS vseeno.

Premislite več meja

Zamislite si branje, ki se konča po Proxy-Agent:. Razčlenjevalnik še vedno potrebuje bajte glave HTTP. Zamislite si drugo, ki se konča na polovici zadnjega zaporedja CRLF. To še ni popoln razdelek glave. Zdaj si zamislite popoln uspešen razdelek glave, ki mu v istem medpomnilniku sledijo bajti tunela: ti dodatni bajti morajo prestati predajo.

407 je drugačen izid. Zahteva ravnanje s preverjanjem pristnosti; ne dovoljuje TLS ClientHello v tunel, ki ni bil nikoli odprt.

Raje izberite vzdrževani konektor, razen če je sama naloga izvesti rokovanje. Ta meja je posebna za tukaj prikazano izmenjavo HTTP/1. Proxy HTTP/2 prenaša CONNECT v toku z drugačnim okvirjanjem.

Sorodni članki