Կանոնը http://reports.example:80/-ն ուղարկում է proxy-ի միջով, բայց http://reports.example/-ին թույլ է տալիս անցնել ուղղակիորեն։ Այդ URL-ները նկարագրում են նույն սովորական HTTP վերջնակետը։ Անհամապատասխանությունը սովորաբար առաջանում է վերլուծված պորտերը բառացիորեն համեմատելուց։

URI.getPort()-ը վերադարձնում է -1, երբ URI-ում պորտ չկա։ Այն չի փոխարինում սխեմայի լռելյայն արժեքը։ Երթուղային քաղաքականությունը, որը արժեքը համեմատում է 80-ի հետ, բաց կթողնի երկրորդ 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;
}

Կիրառեք նույն նորմալացումը համեմատության երկու կողմերում էլ։ Միայն հարցման URI-ն ուղղելը թողնում է բաց թողնված պորտով կարգավորված նպատակակետը առանց համապատասխանության։ Համեմատեք հոսթը, արդյունավետ պորտը և նախատեսված սխեման. մերժեք սխալ ձևավորված կամ հոսթ չունեցող նպատակակետերը սահմանված սխալի ուղով։

Մի դարձրեք յուրաքանչյուր callback-ը HTTP որոշում

Լռելյայն ընտրիչին կարելի է դիմել նաև հում socket-ային միացումների համար՝ socket սխեմայով։ Միայն հոսթի և պորտի համընկնումը չպետք է ստիպի այդ callback-ին վերադարձնել URL հարցումների համար նախատեսված HTTP proxy։ Փոխանցեք չաջակցվող սխեմաները նախորդ ընտրիչին՝ պահպանելով նրա համապատասխան վարքը։

Գրանցեք այդ նախորդ ընտրիչը նախքան ձերը տեղադրելը։ Ընթացիկ լռելյայնը փոխարինողի ներսից փնտրելը կարող է պարզապես կրկին կանչել փոխարինողին։

Անհամապատասխանությունը ախտորոշելիս գրանցեք սխեման, հոսթը, սկզբնական պորտը և արդյունավետ պորտը։ Մի հենվեք մեկ դիտարկված թվի կամ callback-ների հերթականության վրա JDK իրականացումների միջև։ Քաղաքականությունը պետք է ճիշտ որոշում կայացնի յուրաքանչյուր տրված URI-ի համար։

Առնչվող հոդվածներ