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 लाई फरक फ्रेमिङ भएको स्ट्रिममा बोक्छ।