एक नियम 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 दुरुस्त केल्यास वगळलेल्या पोर्टसह कॉन्फिगर केलेले गंतव्य जुळत नाहीच. होस्ट, प्रभावी पोर्ट आणि इच्छित स्कीमची तुलना करा; विकृत किंवा होस्टविरहित गंतव्ये परिभाषित त्रुटी मार्गाने नाकारा.

प्रत्येक कॉलबॅकला HTTP निर्णय करू नका

डीफॉल्ट निवडकर्त्याला कच्च्या socket जोडण्यांसाठीही socket स्कीमने विचारले जाऊ शकते. केवळ होस्ट आणि पोर्ट जुळल्यामुळे त्या कॉलबॅकने URL विनंत्यांसाठीचा HTTP प्रॉक्सी परत करू नये. असमर्थित स्कीम मागील निवडकर्त्याकडे सोपवा, त्याचे योग्य वर्तन टिकवून ठेवा.

तुमचे कस्टम निवडकर्ते बसवण्यापूर्वी तो मागील निवडकर्ता धरून ठेवा. बदलीच्या आतून सध्याचा डीफॉल्ट शोधल्यास बदली पुन्हा कॉल होऊ शकते.

विसंगतीचे निदान करताना स्कीम, होस्ट, मूळ पोर्ट आणि प्रभावी पोर्ट नोंदवा. JDK अंमलबजावणींमध्ये एक निरीक्षित संख्या किंवा कॉलबॅक क्रमावर अवलंबून राहू नका. धोरणाने प्रत्येक दिलेल्या URI साठी योग्य निर्णय घ्यावा.

संबंधित लेख