Klienten ser 200 Connection Established, startar TLS og rapporterer straks tull der det skulle vore ein TLS-record. Sjå etter eit ufullstendig HTTP-svar før du gir cipher-innstillingane til målet skulda.

I ein HTTP/1 CONNECT-utveksling er statuslina berre byrjinga på svaret. Header-felt kan følgje. Den tomme lina som avsluttar header-avsnittet markerer overgangen til tunnelen etter eit vellukka CONNECT-svar.

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

Desse byta kan kome i éi lesing, i fleire lesingar eller i ei lesing som òg inneheld dei neste byta. TCP bevarar ikkje skrivegrensene til serveren.

Gjer overleveringa til ein eksplisitt parser-tilstand

  1. Samle inn og pars statuslina. Bruk den numeriske statusen i staden for ein nøyaktig engelsk reason phrase.
  2. Fortset til den komplette terminatoren for header-avsnittet har kome. Ei vellukka statusline får ikkje dei resterande felta til å forsvinne.
  3. Ved eit vellukka CONNECT-svar blir bytet rett etter terminatoren rekna som byrjinga på tunneldatane. Ved andre svar følgjer du rett handsaming av HTTP-svar og autentisering.
  4. Overfør sambandet og eventuelle ubrukte byt gjennom det bufra I/O-grensesnittet som neste protokoll støttar.

Det siste trinnet er viktig sjølv med eit godt delimitersøk. Ein bufra lesar kan ha brukt meir av socketen enn parsaren bad om. Å starte TLS på den bare socketen medan den lesaren blir forlaten kan etterlate byt i den private bufferen til lesaren.

Bruk ein frist for oppsettet og ei grense for header-storleiken. EOF før terminatoren er eit ufullstendig proxy-svar, ikkje ei innbyding til å vente evig eller prøve TLS likevel.

Tenk gjennom fleire grenser

Tenk deg ei lesing som sluttar etter Proxy-Agent:. Parsaren treng framleis fleire HTTP-header-byt. Tenk deg ei anna som sluttar midt i den siste CRLF-sekvensen. Det er framleis ikkje eit komplett header-avsnitt. Tenk deg no eit komplett vellukka header-avsnitt etterfølgt av tunnelbyt i same buffer: desse ekstra byta må overleve overleveringa.

407 er eit anna utfall. Det krev autentiseringshandsaming; det tillèt ikkje ein TLS ClientHello inn i ein tunnel som aldri vart opna.

Føretrekk ein vedlikehalden connector med mindre det å implementere handtrykket er oppgåva. Denne grensa gjeld spesifikt for HTTP/1-utvekslinga som er vist her. Ein HTTP/2-proxy ber CONNECT på ein straum med anna innramming.

Relaterte artiklar