Sebuah aturan mengirim http://reports.example:80/ melalui proxy tetapi membiarkan http://reports.example/ lewat langsung. Kedua URL itu menggambarkan titik akhir HTTP biasa yang sama. Ketidakcocokan biasanya berasal dari membandingkan port hasil parsing secara harfiah.

URI.getPort() mengembalikan -1 ketika tidak ada port dalam URI. Metode itu tidak menggantikan nilai bawaan untuk skema. Kebijakan perutean yang membandingkan nilai dengan 80 akan melewatkan URL kedua.

String scheme = uri.getScheme();
int port = uri.getPort();
if (port == -1) {
    if ("http".equalsIgnoreCase(scheme)) port = 80;
    else if ("https".equalsIgnoreCase(scheme)) port = 443;
}

Terapkan normalisasi yang sama pada kedua sisi perbandingan. Memperbaiki hanya URI permintaan tetap menyisakan tujuan yang dikonfigurasi dengan port yang dihilangkan tanpa kecocokan. Bandingkan host, port efektif, dan skema yang dimaksud; tolak tujuan yang cacat atau tanpa host melalui jalur kesalahan yang ditentukan.

Jangan jadikan setiap callback keputusan HTTP

Pemilih bawaan juga dapat ditanyai untuk koneksi soket mentah, dengan skema socket. Kecocokan host dan port saja tidak boleh membuat callback itu mengembalikan proxy HTTP yang dimaksudkan untuk permintaan URL. Delegasikan skema yang tidak didukung ke pemilih sebelumnya, sambil mempertahankan perilakunya yang sesuai.

Tangkap pemilih sebelumnya itu sebelum memasang milik Anda. Mencari nilai bawaan saat ini dari dalam pengganti bisa sekadar memanggil pengganti lagi.

Catat skema, host, port asli, dan port efektif saat mendiagnosis ketidakcocokan. Jangan bergantung pada satu angka yang diamati atau urutan callback di berbagai implementasi JDK. Kebijakan harus mengambil keputusan yang benar untuk setiap URI yang diberikan.

Artikel terkait