Java ProxySelector: normalizacija manjkajočih vrat HTTP in HTTPS
Normalizirajte izpuščena vrata HTTP pred primerjanjem ciljev v prilagojenem ProxySelector in držite pravila HTTP zunaj izbire surovih vtičnic.
Pravilo pošlje http://reports.example:80/ skozi proxy, a http://reports.example/ spusti neposredno. Ta URL opisujeta isto običajno končno točko HTTP. Neujemanje običajno izhaja iz dobesedne primerjave razčlenjenih vrat.
URI.getPort() vrne -1, ko v URI ni vrat. Ne nadomesti privzete vrednosti za shemo. Usmerjevalna politika, ki vrednost primerja z 80, bo zgrešila 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;
}
Uporabite enako normalizacijo na obeh straneh primerjave. Če popravite le URI zahteve, ostane nastavljeni cilj z izpuščenimi vrati še vedno brez ujemanja. Primerjajte gostitelja, dejanska vrata in predvideno shemo; zavrnite nepravilne cilje ali cilje brez gostitelja po določeni poti napake.
Ne spreminjajte vsakega povratnega klica v odločitev HTTP
Privzeti izbirnik je mogoče vprašati tudi za povezave surovih vtičnic, s shemo socket. Samo ujemanje gostitelja in vrat ne sme povzročiti, da bi ta povratni klic vrnil proxy HTTP, namenjen zahtevam URL. Nepodprte sheme predajte prejšnjemu izbirniku in ohranite njegovo ustrezno vedenje.
Zajemite ta prejšnji izbirnik, preden namestite svojega. Iskanje trenutne privzete vrednosti znotraj zamenjave lahko preprosto znova pokliče zamenjavo.
Pri diagnosticiranju neujemanja zabeležite shemo, gostitelja, izvirna vrata in dejanska vrata. Ne zanašajte se na eno opaženo število ali vrstni red povratnih klicev med izvedbami JDK. Politika mora sprejeti pravilno odločitev za vsak posredovani URI.