Node HTTP سرور عام پراکسی درخواست کو اپنے request callback کے ذریعے سنبھالتا ہے۔ CONNECT دوسرا راستہ لیتا ہے: سرور درخواست، کلائنٹ ساکٹ اور head بفر کے ساتھ connect خارج کرتا ہے۔

وہ واقعہ HTTP پارسنگ اور ٹنل کے درمیان حوالگی ہے۔ ٹنل شدہ ٹریفک کے لیے استعمال جاری رکھنے والی کوئی عام ServerResponse شے نہیں ہے۔

دلیلیہ کیا لے کر جاتا ہے
reqCONNECT درخواست، بشمول اس کی منزل اتھارٹی اور ہیڈرز
clientSocketکلائنٹ کی طرف واپس جانے والا کنکشن
headٹنل ڈیٹا جو Node پہلے ہی HTTP ہیڈرز سے آگے پڑھ چکا ہے، ممکنہ طور پر خالی

بائٹس ریلے کرنے سے پہلے HTTP فیصلہ مکمل کریں

درخواست کردہ ہوسٹ اور پورٹ کی توثیق کریں، پراکسی کی رسائی اور توثیق کی پالیسی لاگو کریں، اور اپ اسٹریم کنکشن قائم کریں۔ CONNECT service.example:443 جیسی اتھارٹی کی شناخت کرتا ہے؛ ہر کولن پر اندھا دھند تقسیم کرنے کے بجائے IPv6 اتھارٹیز کو مدنظر رکھتے ہوئے اس شکل کو پارس کریں۔

ٹنل قبول ہونے پر، کامیاب HTTP جواب اور اسے ختم کرنے والی خالی سطر بھیجیں۔ پھر کلائنٹ ساکٹ سے آنے والے بعد کے بائٹس کے ساتھ آگے بڑھنے سے پہلے کوئی بھی head بائٹ اپ اسٹریم بھیجیں۔ نیا ڈیٹا سننے والا جوڑ کر ہینڈلر کو الگ سے دیا جا چکا بفر واپس نہیں لایا جا سکتا۔

Node کی سرکاری ٹنلنگ مثال دونوں اسٹریم سمتوں کو جوڑنے سے پہلے serverSocket.write(head) کے ساتھ وہ حوالگی انجام دیتی ہے۔ اس کی چھوٹی مثال تبدیلی دکھاتی ہے؛ تعینات پراکسی کو محدود کنکشن کوششیں، رسائی کنٹرولز اور لائف سائیکل مینجمنٹ بھی درکار ہیں۔

کامیابی کے بعد، بائٹس سروس پروٹوکول کے ہیں

کامیاب CONNECT جواب کنکشن کو بائٹ اسٹریم میں بدل دیتا ہے۔ اگر ہدف HTTPS سائٹ ہے تو اس کا TLS تبادلہ اسی اسٹریم کے اندر ہوتا ہے۔ محض ٹنل کرنے سے پراکسی کو متبادل ویب سائٹ سرٹیفکیٹ جاری کرنے کی ضرورت نہیں ہوتی۔

CONNECT قبول کرنے سے پہلے، HTTP غلطی بتا سکتی ہے کہ انکار کیوں ہوا۔ قبول کرنے کے بعد، اسٹریم میں HTTP 500 لکھنا ٹنل پروٹوکول میں بائٹس داخل کرے گا۔ اس کے بجائے بعد کی ناکامیوں پر مناسب کنکشن ختم یا تباہ کریں۔

دونوں سمتوں کو بیک پریشر سے آگاہ اسٹریم مینجمنٹ سے جوڑیں، اور طے کریں کہ end، error اور close واقعات ساتھی کو کیسے ختم کرتے ہیں۔ ابتدائی head بفر کو اسی ملکیت ماڈل کا حصہ بنا کر محفوظ رکھیں؛ یہ ایپلیکیشن ڈیٹا ہے، پھینکنے والے اضافی HTTP ہیڈرز نہیں۔

متعلقہ مضامین