क्लायंट 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 सर्व्हरच्या लेखन सीमा जपत नाही.

हस्तांतरण स्पष्ट पार्सर स्थिती करा

  1. स्टेटस ओळ गोळा करा आणि पार्स करा. अचूक इंग्रजी कारण-वाक्याऐवजी संख्यात्मक स्टेटस वापरा.
  2. हेडर विभागाचा संपूर्ण शेवट येईपर्यंत पुढे जा. यशस्वी स्टेटस ओळ उर्वरित फील्ड नाहीशी करत नाही.
  3. यशस्वी CONNECT प्रतिसादात त्या शेवटाच्या लगेच नंतरच्या बाइटला सुरंग डेटाची सुरुवात माना. इतर प्रतिसादांमध्ये योग्य HTTP प्रतिसाद व प्रमाणीकरण हाताळणी अनुसरा.
  4. कनेक्शन आणि न वापरलेले बाइट पुढील प्रोटोकॉलला समर्थित बफर असलेल्या I/O इंटरफेसद्वारे हस्तांतरित करा.

चांगली डिलिमिटर शोध असली तरी शेवटचा टप्पा महत्त्वाचा आहे. बफर असलेला रीडर पार्सरने मागितल्यापेक्षा जास्त सॉकेट वापरून गेलेला असू शकतो. तो रीडर सोडून नग्न सॉकेटवर TLS सुरू केल्यास बाइट रीडरच्या खाजगी बफरमध्ये अडकू शकतात.

सेटअपसाठी मुदत आणि हेडर आकाराची मर्यादा वापरा. शेवटापूर्वीचा EOF हा अपूर्ण प्रॉक्सी प्रतिसाद आहे, अनंतकाळ वाट पाहण्याचे किंवा तरीही TLS करून पाहण्याचे निमंत्रण नाही.

अनेक सीमांवर विचार करा

एक वाचन Proxy-Agent: नंतर संपते अशी कल्पना करा. पार्सरला अजून HTTP हेडर बाइट हवे आहेत. शेवटच्या CRLF क्रमाच्या मध्यात संपणाऱ्या दुसऱ्या वाचनाची कल्पना करा. तो अजूनही संपूर्ण हेडर विभाग नाही. आता त्याच बफरमध्ये संपूर्ण यशस्वी हेडर विभागानंतर सुरंग बाइट येतात अशी कल्पना करा: ते अतिरिक्त बाइट हस्तांतरणातून वाचले पाहिजेत.

407 वेगळा निकाल आहे. त्याला प्रमाणीकरण हाताळणी लागते; कधीही न उघडलेल्या सुरंगात TLS ClientHello पाठवण्याची ती परवानगी देत नाही.

हँडशेकची अंमलबजावणी हेच काम नसेल तर देखभाल केलेला कनेक्टर निवडा. ही सीमा येथे दाखवलेल्या HTTP/1 देवाणघेवाणीपुरती आहे. HTTP/2 प्रॉक्सी CONNECT वेगळ्या फ्रेमिंगच्या स्ट्रीमवर वाहून नेते.

संबंधित लेख