Java ProxySelector: дутуу HTTP болон HTTPS портыг хэвийн болгох
Өөрчлөн тохируулсан ProxySelector дотор очих газруудыг харьцуулахын өмнө орхигдсон HTTP портуудыг хэвийн болгож, HTTP дүрмийг түүхий socket сонголтоос гадуур байлгаарай.
Нэг дүрэм 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 холболтын хувьд ч socket схемээр асууж болно. Зөвхөн хост, порт таарах нь тэр callback-ыг URL хүсэлтэд зориулсан HTTP прокси буцаахад хүргэх ёсгүй. Дэмжигдээгүй схемүүдийг өмнөх сонгогчид даалгаж, түүний зохистой зан төлөвийг хадгал.
Өөрийнхийг суулгахаас өмнө тэр өмнөх сонгогчийг барьж ав. Орлуулагчийн дотроос одоогийн өгөгдмөлийг хайх нь орлуулагчийг дахин дуудахад хүргэж болно.
Зөрүүг оношлохдоо схем, хост, анхны порт, үр дүнтэй портыг бүртгэ. JDK хэрэгжүүлэлтүүдийн хооронд ажиглагдсан нэг тоо эсвэл callback-ын дараалалд найдаж болохгүй. Бодлого нь өгөгдсөн URI бүрд зөв шийдвэр гаргах ёстой.