Pravilo šalje http://reports.example:80/ kroz proxy, ali pušta http://reports.example/ direktno. Ti URL-ovi opisuju istu običnu HTTP završnu tačku. Nesklad obično dolazi iz doslovnog poređenja njihovih parsiranih portova.

URI.getPort() vraća -1 kada u URI-ju nema porta. Ne zamenjuje podrazumevanu vrednost za šemu. Politika usmeravanja koja vrednost poredi sa 80 propustiće drugi 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;
}

Primenite istu normalizaciju na obe strane poređenja. Popravljanje samo URI-ja zahteva i dalje ostavlja konfigurisano odredište sa izostavljenim portom bez podudaranja. Uporedite host, efektivni port i nameravanu šemu; odbijte neispravna odredišta ili ona bez hosta kroz definisanu putanju greške.

Ne pretvarajte svaki povratni poziv u HTTP odluku

Podrazumevani selektor može se konsultovati i za veze sirovih soketa, koristeći šemu socket. Samo podudaranje hosta i porta ne sme uzrokovati da taj povratni poziv vrati HTTP proxy namenjen URL zahtevima. Prepustite nepodržane šeme prethodnom selektoru, čuvajući njegovo odgovarajuće ponašanje.

Zabeležite taj prethodni selektor pre instaliranja svog. Traženje trenutnog podrazumevanog iz unutrašnjosti zamene može jednostavno ponovo pozvati zamenu.

Zabeležite šemu, host, izvorni port i efektivni port kada dijagnostikujete nesklad. Ne oslanjajte se na jedan uočeni broj ili redosled povratnih poziva kroz implementacije JDK-a. Politika treba da donese ispravnu odluku za svaki dostavljeni URI.

Povezani članci