Java ProxySelector: გამოტოვებული HTTP და HTTPS პორტების ნორმალიზაცია
ნორმალიზაცია გაუკეთეთ გამოტოვებულ HTTP პორტებს სანამ შეადარებთ დანიშნულებს მორგებულ ProxySelector-ში და HTTP წესები მოარიდეთ ნედლი socket-ების არჩევას.
წესი http://reports.example:80/-ს პროქსის გავლით აგზავნის, მაგრამ 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 პროქსის დაბრუნება. გადასცეთ მხარდაუჭერელი სქემები წინა შემრჩევს, შეინარჩუნეთ მისი შესაბამისი ქცევა.
დაიმახსოვრეთ ის წინა შემრჩევი სანამ თქვენსას დააყენებთ. მიმდინარე ნაგულისხმევის ძებნამ ჩამნაცვლებლის შიგნიდან შეიძლება უბრალოდ კვლავ გამოიძახოს ჩამნაცვლებელი.
შეუსაბამობის დიაგნოსტიკისას ჩაწერეთ სქემა, ჰოსტი, თავდაპირველი პორტი და ეფექტური პორტი. ნუ დაეყრდნობით ერთ დაკვირვებულ რიცხვს ან callback-ების რიგს JDK იმპლემენტაციებს შორის. პოლიტიკამ უნდა მიიღოს სწორი გადაწყვეტილება ყოველი მოწოდებული URI-სთვის.