Regulo sendas http://reports.example:80/ tra prokurilo sed lasas http://reports.example/ iri rekte. Tiuj URL-oj priskribas la saman ordinaran HTTP-finpunkton. La miskongruo kutime venas de laŭvorta komparo de iliaj analizitaj pordoj.

URI.getPort() redonas -1 kiam neniu pordo aperas en la URI. Ĝi ne anstataŭigas la defaŭlton por la skemo. Enkursigada politiko, kiu komparas la valoron kun 80, maltrafos la duan URL-on.

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

Apliku la saman normaligon al ambaŭ flankoj de la komparo. Ripari nur la petan URI-on lasas agorditan celon kun forlasita pordo ankoraŭ sen kongruo. Komparu la gastiganton, la efektivan pordon kaj la celatan skemon; malakceptu misformitajn aŭ sen-gastigantajn celojn per difinita eraro-vojo.

Ne faru ĉiun retrovokon HTTP-decida

Defaŭlta selektilo ankaŭ povas esti konsultita por krudaj ingaj konektoj, uzante la skemon socket. Nur kongruo de gastiganto kaj pordo ne rajtas kaŭzi, ke tiu retrovoko redonu HTTP-prokurilon celatan por URL-petoj. Transdonu nesubtenatajn skemojn al la antaŭa selektilo, konservante ĝian taŭgan konduton.

Kaptu tiun antaŭan selektilon antaŭ ol instali vian propran. Serĉi la nunan defaŭlton el la interno de la anstataŭilo povas simple voki la anstataŭilon denove.

Registru la skemon, gastiganton, originan pordon kaj efektivan pordon kiam vi diagnozas miskongruon. Ne dependu de unu observita nombro aŭ ordo de retrovokoj inter JDK-realigoj. La politiko devas fari ĝustan decidon por ĉiu liverita URI.

Rilataj artikoloj