A pufferelt adatok megőrzése HTTP CONNECT válasz után
Kerülje el a megakadt HTTP CONNECT kézfogást a válaszfejlécek határának megtalálásával és a mögötte érkező bájtok megőrzésével.
Egy kis proxy-burkoló működhet HTTPS-sel, majd megakadhat, amikor olyan protokollhoz használják újra, amelynek kiszolgálója beszél először. A gyanús sor gyakran az, amely arra vár, hogy a fogadópuffer \r\n\r\n végződéssel érjen véget.
A TCP folyamot ad az ügyfélnek. Egy fogadási hívás visszaadhat egy fél HTTP állapotsort, egy teljes CONNECT választ, vagy azt a választ azonnal követő alagútadatokat. Nincs ígéret arra, hogy az olvasás a fejlécek végénél megáll.
Keresse meg a határt a pufferen belül
HTTP/1.1 CONNECT csere esetén gyűjtse a bájtokat, amíg a fejléc-lezáró a puffer bármely pontján meg nem jelenik. Az első előfordulásánál ossza fel. Az állapotsort és a fejléceket az első részből dolgozza fel; a határ utáni mindent külön tartson meg. Várás közben alkalmazzon fejlécméret-korlátot és időtúllépést, az üres socket-olvasást pedig zárt kapcsolatnak tekintse, ne újabb hurokba hívásnak.
Egy utolsó sikeres 2xx válasz közvetlenül azok után a fejlécek után alagút módba váltja a kapcsolatot. A mögötte lévő bájtok már alagútbájtok. Ne dobja el őket, ne várjon CONNECT választörzsre, és ne értelmezze a Content-Length mezőt az új protokoll egy részének elfogyasztására adott engedélyként. A tájékoztató válaszokat, ha vannak, az utolsó válasz előtt kell kezelni.
A burkolónak tovább kell adnia a maradékait
Csak a mögöttes socket visszaadásával elvesznek azok a bájtok, amelyeket a kézfogás-elemző már kihúzott belőle. A következő olvasónak pufferelt folyamra van szüksége, amely először kiadja a mentett farkot, majd folytatja a socket-olvasásokat. Egy kiszolgáló-először protokollnál az első üdvözlés elvesztése mindkét felet végtelenül várakoztathatja.
Fordítva, egy sikertelen CONNECT válasz bájtjai nem alagút-üdvözlés. A 407 továbbra is a proxycseréhez tartozik, és hitelesítéskezelést igényel; egy másik sikertelen állapot megfelelő hibautat igényel.
Ez különösen akkor számít, amikor FTP- vagy SSH-ügyfelet igazítunk HTTP-proxyhoz. A proxynak engedélyeznie kell a kért célportot is, és az FTP-nek további adatkapcsolatokra lehet szüksége. A helyes fejléc-elemzés megoldja a folyam átadását; nem adhat CONNECT-engedélyt, és nem biztosíthatja az FTP második csatornáját.