Java ProxySelector: нормализација портова HTTP и HTTPS који недостају
Нормализујте изостављене портове HTTP пре поређења одредишта у прилагођеном ProxySelector-у и држите правила HTTP изван избора сирових сокета.
Правило шаље http://reports.example:80/ кроз прокси, али пушта http://reports.example/ директно. Ти URL-ови описују исту обичну HTTP завршну тачку. Несклад обично долази из дословног поређења њихових парсираних портова.
URI.getPort() враћа -1 када у URI-ју нема порта. Не замењује подразумевану вредност за шему. Политика усмеравања која вредност пореди са 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. Само подударање хоста и порта не сме да проузрокује да тај повратни позив врати HTTP прокси намењен URL захтевима. Препустите неподржане шеме претходном селектору, чувајући његово одговарајуће понашање.
Забележите тај претходни селектор пре инсталирања свог. Тражење тренутног подразумеваног из унутрашњости замене може једноставно поново позвати замену.
Забележите шему, хост, изворни порт и ефективни порт када дијагностикујете несклад. Не ослањајте се на један уочени број или редослед повратних позива кроз имплементације JDK-а. Политика треба да донесе исправну одлуку за сваки достављени URI.