Java ProxySelector: жетишпеген HTTP жана HTTPS портторун нормалдаштыруу
Жеке ProxySelector ичинде багыттарды салыштыруудан мурун түшүп калган HTTP портторун нормалдаштырыңыз жана HTTP эрежелерин чийки сокет тандоодон тышкары кармаңыз.
Эреже http://reports.example:80/ дарегин прокси аркылуу жөнөтөт, бирок http://reports.example/ дарегине түз өтүүгө жол берет. Бул URL даректери бирдей кадимки HTTP акыркы чекитин сүрөттөйт. Шайкешсиздик адатта талданган портторду сөзмө-сөз салыштыруудан келип чыгат.
URI.getPort() URI ичинде порт болбогондо -1 кайтарат. Ал схема үчүн демейки маанини алмаштырбайт. Маанини 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 схемасы менен кайрылууга болот. Бир гана хост менен порттун дал келиши ошол callback'тин URL сурамдары үчүн арналган HTTP проксисин кайтарышына себеп болбошу керек. Колдоого алынбаган схемаларды мурунку тандагычка өткөрүңүз, анын тиешелүү жүрүм-турумун сактаңыз.
Ошол мурунку тандагычты өзүңүздүкүн орнотуудан мурун кармап алыңыз. Алмаштыргычтын ичинен учурдагы демейкини издөө алмаштыргычты кайра чакырышы мүмкүн.
Шайкешсиздикти диагностикалоодо схеманы, хостту, баштапкы портту жана натыйжалуу портту жазыңыз. JDK ишке ашырууларынын ортосунда байкалган бир санга же callback тартибине таянбаңыз. Саясат ар бир берилген URI үчүн туура чечим кабыл алышы керек.