OpenJDK 25 da Java Socket HTTP CONNECT tunnellari
OpenJDK 25 dagi HTTP proksi soket yo‘lidan ruxsat etilgan TCP xizmatiga yetib borish uchun foydalaning, proksi oxirgi nuqtasi va manzilni alohida saqlang.
Maxsus TCP protokoli proksi manzilga CONNECT ruxsat berganida HTTP proksi orqali o‘tishi mumkin. Ilova protokoli HTTP bo‘lishi shart emas: HTTP tunnelni o‘rnatadi, so‘ngra ilova o‘z baytlarini uning ichida almashadi.
OpenJDK 25 Socket(Proxy) ichida HTTP proksi yo‘lini taqdim etadi. Uning amalga oshirilishi CONNECT almashinuvini bajaradi va ilova foydalanishi uchun ulangan soket qaytaradi.
Proxy route = new Proxy(
Proxy.Type.HTTP,
new InetSocketAddress("proxy.example", 8080));
try (Socket socket = new Socket(route)) {
socket.setSoTimeout(10000);
socket.connect(
InetSocketAddress.createUnresolved("tcp-service.example", 8443),
5000);
InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream();
}Bu parcha java.net va java.io sinflaridan foydalanadi. Ikki oxirgi nuqtani almashtiring va try blokidan chiqishdan oldin protokol almashinuvini bajaring. Ruxsat etilgan ommaviy TCP maqsadi uchun HTTP proksilar ro‘yxatidan HTTP nomzodlarini faqat o‘sha maqsad porti uchun CONNECT ruxsatini tekshirgandan keyin tanlang. Proksi manzili Java birinchi ulanadigan joy; connect ga beriladigan manzil proksi yetib borishi kerak bo‘lgan xizmatni belgilaydi.
Hal qilinmagan manzil bu amalga oshirishning CONNECT so‘rovi uchun xost nomini saqlaydi. Hal qilingan InetSocketAddress esa o‘sha so‘rovga o‘zining hal qilingan IP manzilini beradi. Bu farq proksi xizmat nomini hal qilishi yoki xost nomiga asoslangan siyosatni qo‘llashi kerak bo‘lganda muhim.
Muvaffaqiyatli ulanish sizga nima qoldiradi
Olingan oqimlar tunnel ichidagi xizmat ma’lumotlarini tashiydi. Ular ilovangiz o‘qib tashlashi kerak bo‘lgan alohida HTTP javobini ko‘rsatmaydi. Ikkinchi CONNECT almashinuvini qo‘shish JDK tunnelni allaqachon o‘rnatgandan keyin xizmatga HTTP matnini yuborardi.
Misol ulanish vaqt chegarasi va soketni o‘qish vaqt chegarasini belgilaydi; bular alohida boshqaruvlar, ilova sessiyasi uchun bitta umumiy muddat emas.
CONNECT ruxsati hanuz proksiga tegishli. Oddiy veb so‘rovlarni uzatuvchi oxirgi nuqta xizmat portini rad etishi yoki tunnel ochishdan oldin autentifikatsiya talab qilishi mumkin. Bu nosozliklarni tunnelni qabul qilib, keyin ilova protokolingizni rad etuvchi serverdan alohida tuting.
Agar bu protokolga TLS kerak bo‘lsa, ulangan soket orqali xizmatning mo‘ljallangan xost nomi va odatdagi sertifikat tekshiruvlari bilan TLS kelishing. Faqat CONNECT oqimni shifrlamaydi. Haqiqiy HTTP API uchun HTTP mijozi HTTP xabarlarini ham boshqargani uchun qulayroq interfeys bo‘lib qoladi.