HTTP CONNECT жауабынан кейін буферленген деректерді сақтау
Жауап тақырыптарының шекарасын тауып, одан кейін келетін байттарды сақтау арқылы кептеліп қалған HTTP CONNECT қол алысуын болдырмаңыз.
Кішкентай прокси-қаптама HTTPS үшін жұмыс істеп, содан кейін сервері бірінші сөйлейтін протокол үшін қайта пайдаланылғанда ілініп қалуы мүмкін. Күдікті жол көбінесе қабылдау буферінің \r\n\r\n-мен аяқталуын күтіп тұрған жол.
TCP клиентке ағын береді. Бір қабылдау шақыруы HTTP күй жолының жартысын, толық CONNECT жауабын немесе сол жауапты бірден туннель деректерімен қайтаруы мүмкін. Оқу тақырыптардың соңында тоқтайды деген кепілдік жоқ.
Шекараны буфердің ішінен табыңыз
HTTP/1.1 CONNECT алмасуы үшін тақырыптардың аяқталу белгісі буфердің кез келген жерінде пайда болғанша байттарды жинаңыз. Оның бірінші кездескен жерінде бөліңіз. Күй жолы мен тақырыптарды бірінші бөліктен талдаңыз; шекарадан кейінгінің бәрін бөлек сақтаңыз. Күту кезінде тақырып өлшемінің шегін және уақыт шегін қолданыңыз, ал бос сокет оқуын циклге шақыру емес, жабылған байланыс деп қараңыз.
Соңғы сәтті 2xx жауабы байланысты сол тақырыптардан кейін бірден туннель режиміне ауыстырады. Оның соңындағы байттар қазірдің өзінде туннель байттары. Оларды тастамаңыз, CONNECT жауап денесін күтпеңіз және Content-Length өрісін жаңа протоколдың бір бөлігін тұтынуға рұқсат деп түсіндірмеңіз. Ақпараттық жауаптар болса, олар сол соңғы жауапқа дейін өңделуі керек.
Қаптама өз қалдықтарын әрі қарай беруі керек
Тек астындағы сокетті қайтару қол алысу талдағышы одан әлдеқашан шығарған байттарды жоғалтады. Келесі оқырманға алдымен сақталған құйрықты беретін, содан кейін сокеттен оқуды жалғастыратын буферленген ағын керек. Сервер бірінші сөйлейтін протокол үшін сол бастапқы сәлемді жоғалту екі жақты шексіз күтуде қалдыруы мүмкін.
Керісінше, сәтсіз CONNECT жауабының байттары туннель сәлемі емес. 407 әлі де прокси алмасуына жатады және аутентификацияны өңдеуді қажет етеді; басқа сәтсіз күй тиісті қате жолын қажет етеді.
Бұл әсіресе HTTP проксиі арқылы FTP немесе SSH клиентін бейімдегенде маңызды. Прокси сұралған мақсатты портқа да рұқсат беруі керек, ал FTP қосымша деректер байланыстарын қажет етуі мүмкін. Тақырыптарды дұрыс талдау ағынның берілуін шешеді; ол CONNECT рұқсатын бере алмайды немесе FTP-нің екінші арнасын қамтамасыз ете алмайды.