Vent på den tomme lina etter CONNECT
Les heile HTTP/1 CONNECT-svaret før du overlèt socketen til TLS, sjølv når statuslina kjem først.
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
- Samle inn og pars statuslina. Bruk den numeriske statusen i staden for ein nøyaktig engelsk reason phrase.
- Fortset til den komplette terminatoren for header-avsnittet har kome. Ei vellukka statusline får ikkje dei resterande felta til å forsvinne.
- 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.
- 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.