Java ProxySelector: غائب HTTP اور HTTPS پورٹس کو معمول پر لانا
حسبِ ضرورت ProxySelector میں منزلوں کا موازنہ کرنے سے پہلے چھوڑی گئی HTTP پورٹس کو معمول پر لائیں اور HTTP قواعد کو خام socket انتخاب سے باہر رکھیں۔
ایک قاعدہ http://reports.example:80/ کو پراکسی کے ذریعے بھیجتا ہے مگر http://reports.example/ کو سیدھا جانے دیتا ہے۔ یہ دونوں URL ایک ہی عام HTTP اینڈ پوائنٹ بیان کرتے ہیں۔ عدم مطابقت عموماً ان کی پارس شدہ پورٹس کے لفظی موازنے سے آتی ہے۔
جب URI میں کوئی پورٹ نہ ہو تو URI.getPort() -1 واپس کرتا ہے۔ یہ اسکیم کے لیے طے شدہ قدر کی جگہ نہیں لیتا۔ قدر کا 80 سے موازنہ کرنے والی روٹنگ پالیسی دوسرے URL کو رہ جائے گی۔
String scheme = uri.getScheme();
int port = uri.getPort();
if (port == -1) {
if ("http".equalsIgnoreCase(scheme)) port = 80;
else if ("https".equalsIgnoreCase(scheme)) port = 443;
}
موازنے کے دونوں اطراف پر وہی معمول کاری لاگو کریں۔ صرف درخواست کا URI درست کرنے سے چھوڑی گئی پورٹ والا تشکیل شدہ منزل پھر بھی بے میل رہتا ہے۔ میزبان، مؤثر پورت اور مطلوبہ اسکیم کا موازنہ کریں؛ خراب یا میزبان کے بغیر منزلوں کو متعین غلطی راستے سے مسترد کریں۔
ہر callback کو HTTP فیصلہ نہ بنائیں
طے شدہ منتخب کنندہ سے خام socket کنکشنز کے لیے بھی socket اسکیم کے ساتھ پوچھا جا سکتا ہے۔ محض میزبان اور پورٹ کا میل کھانا اس callback کو URL درخواستوں کے لیے مطلوبہ HTTP پراکسی واپس کرنے کا سبب نہیں بننا چاہیے۔ غیر معاون اسکیموں کو سابقہ منتخب کنندہ کے حوالے کریں اور اس کا مناسب رویہ برقرار رکھیں۔
اپنا حسبِ ضرورت منتخب کنندہ نصب کرنے سے پہلے وہ سابقہ منتخب کنندہ پکڑ لیں۔ متبادل کے اندر سے موجودہ طے شدہ قدر تلاش کرنا متبادل کو دوبارہ کال کر سکتا ہے۔
عدم مطابقت کی تشخیص کرتے وقت اسکیم، میزبان، اصل پورٹ اور مؤثر پورت لاگ کریں۔ JDK نفاذات میں کسی ایک مشاہدہ شدہ عدد یا callback ترتیب پر انحصار نہ کریں۔ پالیسی کو ہر فراہم کردہ URI کے لیے درست فیصلہ لینا چاہیے۔