Taisyklė siunčia http://reports.example:80/ per proxy, bet http://reports.example/ leidžia eiti tiesiogiai. Šie URL aprašo tą patį įprastą HTTP galinį tašką. Neatitikimas dažniausiai kyla dėl pažodžiui lyginamų išanalizuotų prievadų.

URI.getPort() grąžina -1, kai URI nėra prievado. Jis nepakeičia schemos numatytosios reikšmės. Maršruto politika, kuri lygina reikšmę su 80, praleis antrąjį 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;
}

Taikykite tą pačią normalizaciją abiem palyginimo pusėms. Pataisius tik užklausos URI, sukonfigūruota paskirties vieta su praleistu prievadu vis tiek lieka nesulyginta. Lyginkite mazgą, faktinį prievadą ir numatytą schemą; atmeskite netaisyklingas ar be mazgo paskirties vietas per apibrėžtą klaidų kelią.

Nepaverskite kiekvieno atgalinio iškvietimo HTTP sprendimu

Numatytojo parinkiklio galima klausti ir dėl žaliųjų socket'ų jungčių, naudojant socket schemą. Vien mazgo ir prievado sutapimas neturi lemti, kad šis atgalinis iškvietimas grąžintų HTTP proxy, skirtą URL užklausoms. Perduokite nepalaikomas schemas ankstesniam parinkikliui, išsaugodami tinkamą jo elgesį.

Užfiksuokite tą ankstesnį parinkiklį prieš įdiegdami savąjį. Dabartinės numatytosios reikšmės paieška iš pakaitalo vidaus gali tiesiog vėl iškviesti pakaitalą.

Diagnozuodami neatitikimą registruokite schemą, mazgą, pradinį prievadą ir faktinį prievadą. Nepasikliaukite vienu pastebėtu skaičiumi ar atgalinių iškvietimų tvarka tarp JDK implementacijų. Politika turi priimti teisingą sprendimą kiekvienam pateiktam URI.

Susiję straipsniai