Una regla envia http://reports.example:80/ a través d'un proxy però deixa http://reports.example/ anar directe. Aquestes URL descriuen el mateix punt final HTTP ordinari. La discrepància sol venir de comparar literalment els ports analitzats.

URI.getPort() retorna -1 quan no apareix cap port a l'URI. No substitueix el valor per defecte de l'esquema. Una política d'encaminament que compari el valor amb 80 es perdrà la segona 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;
}

Aplica la mateixa normalització als dos costats de la comparació. Arreglar només l'URI de la petició encara deixa sense coincidir una destinació configurada amb un port omès. Compara l'amfitrió, el port efectiu i l'esquema previst; rebutja les destinacions mal formades o sense amfitrió per un camí d'error definit.

No converteixis cada callback en una decisió HTTP

Un selector per defecte també es pot consultar per a connexions de sòcols en brut, amb l'esquema socket. Una coincidència només d'amfitrió i port no ha de fer que aquest callback retorni un proxy HTTP pensat per a peticions URL. Delega els esquemes no suportats al selector anterior, preservant-ne el comportament adequat.

Captura aquest selector anterior abans d'instal·lar el teu. Consultar el valor per defecte actual des de dins del substitut pot simplement tornar a cridar el substitut.

Registra l'esquema, l'amfitrió, el port original i el port efectiu quan diagnostiquis una discrepància. No depenguis d'un sol nombre observat ni de l'ordre de les crides entre implementacions del JDK. La política ha de prendre una decisió correcta per a cada URI proporcionat.

Articles relacionats