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.