CONNECT తర్వాత ఖాళీ పంక్తి కోసం వేచి ఉండండి
స్టేటస్ లైన్ మొదట వచ్చినా, సాకెట్ను TLS కి అప్పగించే ముందు పూర్తి HTTP/1 CONNECT ప్రతిస్పందనను చదవండి.
క్లయింట్ 200 Connection Established చూసి TLS ప్రారంభిస్తుంది, ఆపై TLS రికార్డ్ ఉండాల్సిన చోట వెంటనే అర్థరహితంగా నివేదిస్తుంది. గమ్యస్థానపు సైఫర్ సెట్టింగ్లను నిందించే ముందు అసంపూర్ణ HTTP ప్రతిస్పందన కోసం వెతకండి.
HTTP/1 CONNECT మార్పిడిలో స్టేటస్ లైన్ ప్రతిస్పందనకు కేవలం ఆరంభం మాత్రమే. ఆ తర్వాత హెడర్ ఫీల్డ్లు రావచ్చు. విజయవంతమైన CONNECT ప్రతిస్పందన తర్వాత హెడర్ విభాగాన్ని ముగించే ఖాళీ పంక్తి టన్నెల్లోకి మారడాన్ని సూచిస్తుంది.
HTTP/1.1 200 Connection Established\r\n
Proxy-Agent: example\r\n
\r\n
ఈ బైట్లు ఒక పఠనంలో, అనేక పఠనాలలో, లేదా తర్వాతి బైట్లను కూడా కలిగిన పఠనంలో రావచ్చు. TCP సర్వర్ రాత పరిమితులను కాపాడదు.
అప్పగింతను స్పష్టమైన పార్సర్ స్థితిగా చేయండి
- స్టేటస్ లైన్ను సేకరించి పార్స్ చేయండి. ఖచ్చితమైన ఆంగ్ల కారణ వాక్యానికి బదులు సంఖ్యా స్థితిని ఉపయోగించండి.
- హెడర్ విభాగం పూర్తి ముగింపు వచ్చేవరకు కొనసాగించండి. విజయవంతమైన స్టేటస్ లైన్ మిగిలిన ఫీల్డ్లను అదృశ్యం చేయదు.
- విజయవంతమైన CONNECT ప్రతిస్పందనలో ఆ ముగింపు తర్వాత వెంటనే ఉన్న బైట్ను టన్నెల్ డేటా ఆరంభంగా పరిగణించండి. ఇతర ప్రతిస్పందనలలో తగిన HTTP ప్రతిస్పందన, ప్రమాణీకరణ నిర్వహణను అనుసరించండి.
- కనెక్షన్, ఉపయోగించని బైట్లను తదుపరి ప్రోటోకాల్ మద్దతిచ్చే బఫర్ చేసిన I/O ఇంటర్ఫేస్ ద్వారా బదిలీ చేయండి.
మంచి డెలిమిటర్ శోధన ఉన్నా చివరి దశ ముఖ్యం. బఫర్ చేసిన రీడర్ పార్సర్ అడిగినదానికంటే ఎక్కువ సాకెట్ వినియోగించి ఉండవచ్చు. ఆ రీడర్ను వదిలి నగ్న సాకెట్పై TLS ప్రారంభిస్తే బైట్లు రీడర్ ప్రైవేట్ బఫర్లో చిక్కుకోవచ్చు.
సెటప్కు గడువు, హెడర్ పరిమాణానికి పరిమితి ఉపయోగించండి. ముగింపుకు ముందు EOF అంటే అసంపూర్ణ ప్రాక్సీ ప్రతిస్పందన, ఎప్పటికీ వేచి ఉండమని లేదా ఏమైనా TLS ప్రయత్నించమని ఆహ్వానం కాదు.
అనేక హద్దుల గురించి ఆలోచించండి
Proxy-Agent: తర్వాత ముగిసే పఠనాన్ని ఊహించుకోండి. పార్సర్కు ఇంకా HTTP హెడర్ బైట్లు కావాలి. చివరి CRLF క్రమం మధ్యలో ముగిసే మరొకటి ఊహించుకోండి. అది ఇంకా పూర్తి హెడర్ విభాగం కాదు. ఇప్పుడు అదే బఫర్లో పూర్తి విజయవంతమైన హెడర్ విభాగం తర్వాత టన్నెల్ బైట్లు వస్తాయని ఊహించుకోండి: ఆ అదనపు బైట్లు అప్పగింతను దాటాలి.
407 వేరే ఫలితం. దానికి ప్రమాణీకరణ నిర్వహణ కావాలి; ఎప్పుడూ తెరవని టన్నెల్లోకి TLS ClientHello పంపడానికి అది అనుమతించదు.
హ్యాండ్షేక్ అమలు చేయడమే పని కాకపోతే నిర్వహించబడే కనెక్టర్ను ఎంచుకోండి. ఈ హద్దు ఇక్కడ చూపిన HTTP/1 మార్పిడికి ప్రత్యేకం. HTTP/2 ప్రాక్సీ CONNECT ను భిన్న ఫ్రేమింగ్ ఉన్న స్ట్రీమ్పై మోసుకెళ్తుంది.