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 کو مختلف فریمنگ والی اسٹریم پر لے جاتی ہے۔