Sääntö lähettää http://reports.example:80/ välityspalvelimen kautta mutta päästää http://reports.example/ suoraan. Nuo URL-osoitteet kuvaavat samaa tavallista HTTP-päätepistettä. Epäjohdonmukaisuus johtuu yleensä siitä, että niiden jäsennetyt portit vertaillaan kirjaimellisesti.

URI.getPort() palauttaa -1, kun URI:ssa ei ole porttia. Se ei korvaa skeeman oletusarvoa. Reitityskäytäntö, joka vertaa arvoa 80:een, jättää toisen URL-osoitteen huomaamatta.

String scheme = uri.getScheme();
int port = uri.getPort();
if (port == -1) {
    if ("http".equalsIgnoreCase(scheme)) port = 80;
    else if ("https".equalsIgnoreCase(scheme)) port = 443;
}

Käytä samaa normalisointia vertailun molemmilla puolilla. Vain pyynnön URI:n korjaaminen jättää määritetyn kohteen, josta portti on jätetty pois, yhä täsmäämättä. Vertaa isäntää, tehollista porttia ja aiottua skeemaa; hylkää virheelliset tai isännättömät kohteet määritellyn virhepolun kautta.

Älä tee jokaisesta takaisinkutsusta HTTP-päätöstä

Oletusvalitsimelta voidaan kysyä myös raakasocket-yhteyksille skeemalla socket. Pelkkä isännän ja portin täsmääminen ei saa johtaa siihen, että takaisinkutsu palauttaa URL-pyynnöille tarkoitetun HTTP-välityspalvelimen. Siirrä tukemattomat skeemat edelliselle valitsimelle ja säilytä sen asianmukainen käyttäytyminen.

Tallenna tuo edellinen valitsin ennen oman valitsimesi asentamista. Nykyisen oletusarvon hakeminen korvaajan sisältä voi yksinkertaisesti kutsua korvaajaa uudelleen.

Kirjaa skeema, isäntä, alkuperäinen portti ja tehollinen portti, kun diagnosoit epäjohdonmukaisuutta. Älä luota yhteen havaittuun lukuun tai takaisinkutsujen järjestykseen JDK-toteutusten välillä. Käytännön on tehtävä oikea päätös jokaiselle toimitetulle URI:lle.

Aiheeseen liittyvät artikkelit