Várja meg a CONNECT utáni üres sort
Olvassa el a teljes HTTP/1 CONNECT választ, mielőtt a socketet átadja a TLS-nek, akkor is, ha a státusor érkezik meg először.
A kliens látja a 200 Connection Established választ, elindítja a TLS-t, és azonnal értelmetlenséget jelent ott, ahol TLS-rekordnak kellene lennie. Keressen befejezetlen HTTP-választ, mielőtt a cél titkosítási beállításait okolná.
Egy HTTP/1 CONNECT csere során a státusor csak a válasz eleje. Utána fejlécmezők következhetnek. A fejlécszakaszt lezáró üres sor jelzi a tunelre váltást egy sikeres CONNECT válasz után.
HTTP/1.1 200 Connection Established\r\n
Proxy-Agent: example\r\n
\r\n
Ezek a bájtok egyetlen olvasásban, több olvasásban vagy olyan olvasásban is megérkezhetnek, amely a következő bájtokat is tartalmazza. A TCP nem őrzi meg a szerver írási határait.
Tegye az átadást a parser kifejezett állapotává
- Gyűjtse össze és elemezze a státusort. A numerikus állapotot használja a pontos angol indoklás helyett.
- Folytassa, amíg a fejlécszakasz teljes lezárója meg nem érkezik. Egy sikeres státusor nem tünteti el a fennmaradó mezőket.
- Sikeres CONNECT válasz esetén a lezáró utáni bájtot tekintse a tuneladat kezdetének. Más válaszoknál kövesse a megfelelő HTTP-válasz- és hitelesítéskezelést.
- Adja át a kapcsolatot és a fel nem használt bájtokat a következő protokoll által támogatott pufferelt I/O felületen.
Az utolsó lépés jó határolókeresés mellett is számít. Egy pufferelt olvasó többet fogyaszthatott a socketből, mint amennyit a parser kért. A TLS indítása a csupasz socketen, miközben elhagyja ezt az olvasót, bájtokat hagyhat az olvasó saját pufferében.
Használjon beállítási határidőt és fejlécméret-korlátot. A lezáró előtti EOF egy befejezetlen proxyválasz, nem meghívás arra, hogy örökké várjon, vagy hogy mégis próbálkozzon a TLS-sel.
Gondoljon végig több határt
Képzeljen el egy olvasást, amely Proxy-Agent: után ér véget. A parsernek még több HTTP-fejlécbájtra van szüksége. Képzeljen el egy másikat, amely a záró CRLF-sorozat közepén ér véget. Az még nem teljes fejlécszakasz. Most képzeljen el egy teljes, sikeres fejlécszakaszt, amelyet ugyanabban a pufferben tunelbájtok követnek: ezeknek a plusz bájtoknak túl kell élniük az átadást.
A 407 más kimenet. Hitelesítéskezelést igényel; nem engedélyez TLS ClientHello-t egy soha meg nem nyitott tunelbe.
A karbantartott csatlakozót részesítse előnyben, hacsak nem a kézfogás megvalósítása a feladat. Ez a határ az itt bemutatott HTTP/1 cserére vonatkozik. Egy HTTP/2 proxy CONNECT-et más keretezésű streamben szállít.