Java ProxySelector. բացակայող HTTP և HTTPS պորտերի նորմալացում
Նորմալացրեք բաց թողնված HTTP պորտերը նախքան հատուկ ProxySelector-ում նպատակակետերը համեմատելը և HTTP կանոնները դուրս պահեք հում socket-ների ընտրությունից։
Կանոնը 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-ի համար։