Egy szabály http://reports.example:80/-t proxyn keresztül küld, de http://reports.example/-t közvetlenül engedi. Ezek az URL-ek ugyanazt a hétköznapi HTTP-végpontot írják le. Az eltérés általában abból ered, hogy a feldolgozott portokat szó szerint hasonlítják össze.

A URI.getPort() -1-t ad vissza, ha az URI-ban nincs port. Nem helyettesíti a séma alapértelmezett értékét. Egy útválasztási szabályzat, amely az értéket 80-hoz hasonlítja, kihagyja a második URL-t.

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

Ugyanezt a normalizálást alkalmazza az összehasonlítás mindkét oldalára. Ha csak a kérelem URI-ját javítja, a kihagyott porttal rendelkező beállított cél továbbra is illeszkedés nélkül marad. Hasonlítsa össze a gazdagépet, a tényleges portot és a szándékolt sémát; a hibás vagy gazdagép nélküli célokat egy meghatározott hibapályán keresztül utasítsa el.

Ne alakítson minden visszahívást HTTP-döntéssé

Az alapértelmezett választót nyers socketkapcsolatokhoz is meg lehet kérdezni, a socket sémával. Önmagában a gazdagép és a port egyezése nem okozhatja, hogy ez a visszahívás URL-kérésekhez szánt HTTP-proxyt adjon vissza. Adja át a nem támogatott sémákat az előző választónak, megőrizve annak megfelelő viselkedését.

Rögzítse azt az előző választót, mielőtt telepíti a sajátját. Az aktuális alapértelmezett keresése a helyettesítő belsejéből egyszerűen újra meghívhatja a helyettesítőt.

Az eltérés diagnosztizálásakor naplózza a sémát, a gazdagépet, az eredeti portot és a tényleges portot. Ne hagyatkozzon egyetlen megfigyelt számra vagy a visszahívások sorrendjére a JDK-implementációk között. A szabályzatnak minden megadott URI-ra helyes döntést kell hoznia.

Kapcsolódó cikkek