Java ProxySelector: توحيد المنافذ الناقصة لـ HTTP وHTTPS
وحّد منافذ HTTP المحذوفة قبل مقارنة الوجهات في ProxySelector مخصص، وأبقِ قواعد HTTP خارج اختيار المقابس الخام.
قاعدة ما ترسل http://reports.example:80/ عبر وكيل لكنها تترك http://reports.example/ يمر مباشرة. هذان العنوانان يصفان النقطة الطرفية HTTP العادية نفسها. غالباً ما يأتي عدم التطابق من مقارنة المنافذ المحلّلة حرفياً.
يعيد URI.getPort() القيمة -1 عندما لا يظهر منفذ في الـ URI. وهو لا يستبدل القيمة الافتراضية للمخطط. سياسة توجيه تقارن القيمة بـ 80 ستُفلت العنوان الثاني.
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 الطلب وحده يترك وجهة مُهيّأة بمنفذ محذوف غير مطابقة. قارن المضيف والمنفذ الفعّال والمخطط المقصود؛ وارفض الوجهات المشوّهة أو التي بلا مضيف عبر مسار خطأ محدد.
لا تحوّل كل نداء إلى قرار HTTP
يمكن استشارة المحدد الافتراضي أيضاً لاتصالات المقابس الخام، باستخدام مخطط socket. مجرد تطابق المضيف والمنفذ يجب ألا يجعل ذلك النداء يعيد وكيل HTTP مخصصاً لطلبات URL. فوّض المخططات غير المدعومة إلى المحدد السابق، مع الحفاظ على سلوكه المناسب.
التقط ذلك المحدد السابق قبل تثبيت المحدد المخصص. البحث عن الافتراضي الحالي من داخل البديل قد يستدعي البديل نفسه مرة أخرى.
سجّل المخطط والمضيف والمنفذ الأصلي والمنفذ الفعّال عند تشخيص عدم التطابق. لا تعتمد على رقم واحد ملاحظ أو ترتيب معين للنداءات عبر تطبيقات JDK. ينبغي أن تتخذ السياسة قراراً صحيحاً لكل URI مُقدَّم.