చిన్న ప్రాక్సీ ర్యాపర్ HTTPS కోసం పనిచేసి, సర్వర్ ముందుగా మాట్లాడే ప్రోటోకాల్ కోసం మళ్లీ వాడినప్పుడు వేలాడవచ్చు. అనుమానాస్పద పంక్తి సాధారణంగా స్వీకరణ బఫర్ \r\n\r\n తో ముగియాలని ఎదురుచూసే పంక్తి.

TCP క్లయింట్‌కు స్ట్రీమ్‌ను ఇస్తుంది. ఒక స్వీకరణ కాల్ సగం HTTP స్థితి పంక్తి, పూర్తి CONNECT ప్రతిస్పందన, లేదా ఆ ప్రతిస్పందన వెంటనే టన్నెల్ డేటాతో తిరిగి ఇవ్వవచ్చు. చదవడం హెడర్ల చివరిలో ఆగుతుందని ఎటువంటి హామీ లేదు.

బఫర్ లోపల సరిహద్దును కనుగొనండి

HTTP/1.1 CONNECT మార్పిడి కోసం, హెడర్ ముగింపు గుర్తు బఫర్‌లో ఎక్కడైనా కనిపించే వరకు బైట్లను సేకరించండి. అది మొదట కనిపించిన చోట విభజించండి. మొదటి భాగం నుండి స్థితి పంక్తి మరియు హెడర్లను విశ్లేషించండి; సరిహద్దు తర్వాత ఉన్నదంతా విడిగా ఉంచండి. ఎదురుచూసేటప్పుడు హెడర్ పరిమాణ పరిమితి మరియు కాల పరిమితిని వర్తింపజేయండి, మరియు ఖాళీ సాకెట్ పఠనాన్ని లూప్‌కు మరో ఆహ్వానంగా కాకుండా మూసివేసిన కనెక్షన్‌గా పరిగణించండి.

చివరి విజయవంతమైన 2xx ప్రతిస్పందన ఆ హెడర్ల తర్వాత వెంటనే కనెక్షన్‌ను టన్నెల్ మోడ్‌లోకి మారుస్తుంది. దానిని అనుసరించే బైట్లు ఇప్పటికే టన్నెల్ బైట్లు. వాటిని పారేయవద్దు, CONNECT ప్రతిస్పందన బాడీ కోసం ఎదురుచూడవద్దు, మరియు Content-Length ఫీల్డ్‌ను కొత్త ప్రోటోకాల్‌లోని భాగాన్ని వినియోగించుకునే అనుమతిగా అర్థం చేసుకోవద్దు. సమాచార ప్రతిస్పందనలు ఉంటే, అవి ఆ చివరి ప్రతిస్పందనకు ముందు నిర్వహించబడాలి.

ర్యాపర్ తన మిగిలిన భాగాలను ముందుకు పంపాలి

కేవలం అంతర్లీన సాకెట్‌ను తిరిగి ఇవ్వడం వల్ల హ్యాండ్‌షేక్ పార్సర్ ఇప్పటికే దాని నుండి బయటకు తీసిన బైట్లు పోతాయి. తదుపరి పాఠకుడికి మొదట భద్రపరచిన తోకను ఇచ్చి, ఆపై సాకెట్ పఠనాలను పునఃప్రారంభించే బఫర్ చేసిన స్ట్రీమ్ కావాలి. సర్వర్-మొదటి ప్రోటోకాల్‌కు ఆ ప్రారంభ పలకరింపును కోల్పోవడం రెండు వైపులను అనంతంగా ఎదురుచూసేలా చేయవచ్చు.

దీనికి విరుద్ధంగా, విఫలమైన CONNECT ప్రతిస్పందన బైట్లు టన్నెల్ పలకరింపు కాదు. 407 ఇప్పటికీ ప్రాక్సీ మార్పిడికే చెందుతుంది మరియు ప్రామాణీకరణ నిర్వహణ అవసరం; మరో విఫల స్థితికి సరైన లోప మార్గం కావాలి.

HTTP ప్రాక్సీ ద్వారా FTP లేదా SSH క్లయింట్‌ను స్వీకరించేటప్పుడు ఇది ప్రత్యేకంగా ముఖ్యం. ప్రాక్సీ అభ్యర్థించిన గమ్యస్థాన పోర్టును కూడా అనుమతించాలి, మరియు FTP కి అదనపు డేటా కనెక్షన్లు అవసరం కావచ్చు. సరైన హెడర్ విశ్లేషణ స్ట్రీమ్ అప్పగింపును పరిష్కరిస్తుంది; అది CONNECT అనుమతిని ఇవ్వలేదు లేదా FTP యొక్క రెండవ ఛానెల్‌ను అందించలేదు.

సంబంధిత వ్యాసాలు