En regel skickar http://reports.example:80/ via en proxy men låter http://reports.example/ gå direkt. Dessa URL:er beskriver samma vanliga HTTP-slutpunkt. Avvikelsen kommer oftast från att deras parsade portar jämförs bokstavligt.

URI.getPort() returnerar -1 när ingen port finns i URI:n. Den ersätter inte schemats standardvärde. En routingpolicy som jämför värdet med 80 missar den andra URL:en.

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

Tillämpa samma normalisering på båda sidor av jämförelsen. Att bara rätta begärans URI lämnar fortfarande en konfigurerad destination med utelämnad port utan träff. Jämför värd, effektiv port och avsett schema; avvisa felformade eller värdlösa destinationer via en definierad felväg.

Gör inte varje återanrop till ett HTTP-beslut

En standardväljare kan också tillfrågas för råa socketanslutningar, med schemat socket. Enbart värd- och portmatchning får inte göra att återanropet returnerar en HTTP-proxy avsedd för URL-begäranden. Delegera scheman som inte stöds till den föregående väljaren och behåll dess lämpliga beteende.

Fånga den föregående väljaren innan du installerar din egen. Att slå upp nuvarande standard inifrån ersättaren kan helt enkelt anropa ersättaren igen.

Logga schema, värd, ursprunglig port och effektiv port när du diagnostiserar en avvikelse. Förlita dig inte på ett enda observerat tal eller återanropens ordning mellan JDK-implementationer. Policyn bör fatta ett korrekt beslut för varje angiven URI.

Relaterade artiklar