De klient sjocht 200 Connection Established, begjint TLS en meldt daliks ûnsin wêr't in TLS-record wêze moat. Sykje in ûnfoltôge HTTP-antwurd foardat jo de cipher-ynstellings fan 'e bestimming de skuld jouwe.

Yn in HTTP/1 CONNECT-útwikseling is de statusrigel mar it begjin fan it antwurd. Header-fjilden kinne derop folgje. De lege rigel dy't de header-seksje einiget, markearret de oergong nei de tunnel nei in slagge CONNECT-antwurd.

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

Dizze bytes kinne yn ien lêzing komme, yn ferskate lêzingen, of yn in lêzing dy't ek folgjende bytes befettet. TCP bewarret de skriuwgrinzen fan 'e tsjinner net.

Meitsje de oerdracht in eksplisite parser-tastân

  1. Ferskriel en parsearje de statusrigel. Brûk de numerike status yn stee fan in krekte Ingelske reason phrase.
  2. Gean troch oant de folsleine terminator fan 'e header-seksje oankommen is. In slagge statusrigel lit de oerbleaune fjilden net ferdwine.
  3. By in slagge CONNECT-antwurd is de byte fuort nei dy terminator it begjin fan tunneldata. By oare antwurden folgje de passende ôfhanneling fan HTTP-antwurd en autentikaasje.
  4. Draach de ferbining en alle net-brûkte bytes oer fia de bufferere I/O-ynterface dy't it folgjende protokol stipet.

De lêste stap is wichtich, ek by in goede syktocht nei in skiedingsteken. In bufferere lêzer kin mear fan 'e socket konsumearre hawwe as de parser frege. TLS starte op 'e bleate socket wylst jo dy lêzer opjouwe, kin bytes efterlitte yn it privee-buffer fan 'e lêzer.

Brûk in deadline foar it opsetten en in limyt foar de headergrutte. EOF foar de terminator is in ûnfolslein proxy-antwurd, net in útnoadiging om ivich te wachtsjen of dochs TLS te besykjen.

Tink ferskate grinzen troch

Stel jo in lêzing foar dy't nei Proxy-Agent: einiget. De parser hat noch mear HTTP-header-bytes nedich. Stel jo in oare foar dy't healwei de lêste CRLF-sekwinsje einiget. Dat is noch gjin folsleine header-seksje. Stel jo no in folsleine slagge header-seksje foar, folge troch tunnelbytes yn itselde buffer: dy ekstra bytes moatte de oerdracht oerlibje.

In 407 is in oare útkomst. It freget autentikaasje-ôfhanneling; it jouwt gjin TLS ClientHello tagong ta in tunnel dy't nea iepene is.

Kies in ûnderholden connector, útsein as it ymplemintearjen fan 'e hânskodding de taak is. Dizze grins is spesifyk foar de hjir toande HTTP/1-útwikseling. In HTTP/2-proxy draacht CONNECT op in stream mei oare framing.

Relatearre artikelen