OpenJDK 25 ရှိ Java Socket HTTP CONNECT လိုဏ်ခေါင်းများ
OpenJDK 25 ရှိ HTTP proxy socket လမ်းကြောင်းကို အသုံးပြု၍ ခွင့်ပြုထားသော TCP ဝန်ဆောင်မှုဆီ ရောက်ရှိပါ၊ proxy ၏ အဆုံးမှတ်နှင့် ဦးတည်ရာကို သီးခြားထားပါ။
စိတ်ကြိုက် TCP ပရိုတိုကောတစ်ခုသည် proxy က ဦးတည်ရာသို့ CONNECT ကို ခွင့်ပြုသောအခါ HTTP proxy မှတစ်ဆင့် သွားနိုင်သည်။ အပလီကေးရှင်း ပရိုတိုကောသည် HTTP ဖြစ်ရန် မလိုအပ်ပါ- HTTP က လိုဏ်ခေါင်းကို တည်ဆောက်ပြီးနောက် အပလီကေးရှင်းက ၎င်း၏ ကိုယ်ပိုင် byte များကို အတွင်း၌ ဖလှယ်သည်။
OpenJDK 25 သည် Socket(Proxy) တွင် HTTP proxy လမ်းကြောင်းကို ပေးသည်။ ၎င်း၏ အကောင်အထည်ဖော်မှုသည် CONNECT ဖလှယ်မှုကို လုပ်ဆောင်ပြီး အပလီကေးရှင်း အသုံးပြုရန် ချိတ်ဆက်ထားသော socket ကို ပြန်ပေးသည်။
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();
}ဤအပိုင်းသည် java.net နှင့် java.io မှ class များကို အသုံးပြုသည်။ အဆုံးမှတ် နှစ်ခုကို အစားထိုးပြီး try block မှ မထွက်မီ ပရိုတိုကော ဖလှယ်မှုကို လုပ်ဆောင်ပါ။ ခွင့်ပြုထားသော အများသုံး TCP ပစ်မှတ်အတွက် ထို ပစ်မှတ်၏ port အတွက် CONNECT ခွင့်ပြုချက်ကို စစ်ဆေးပြီးမှသာ HTTP proxy စာရင်းမှ HTTP ကိုယ်စားလှယ်လောင်းများကို ရွေးပါ။ proxy လိပ်စာသည် Java ပထမဆုံး ချိတ်ဆက်သော နေရာဖြစ်သည်၊ connect သို့ ပေးသော လိပ်စာက proxy ရောက်ရမည့် ဝန်ဆောင်မှုကို ဖော်ပြသည်။
မဖြေရှင်းရသေးသော ဦးတည်ရာသည် ဤ အကောင်အထည်ဖော်မှု၏ CONNECT တောင်းဆိုမှုအတွက် ၎င်း၏ hostname ကို ထိန်းသိမ်းထားသည်။ ဖြေရှင်းပြီးသော InetSocketAddress ကမူ ထို တောင်းဆိုမှုသို့ ၎င်း၏ ဖြေရှင်းပြီးသော IP လိပ်စာကို ပေးသည်။ proxy က ဝန်ဆောင်မှု အမည်ကို ဖြေရှင်းရန် သို့မဟုတ် hostname အခြေခံ မူဝါဒကို ကျင့်သုံးရန် လိုအပ်သောအခါ ဤ ကွာခြားချက်သည် အရေးကြီးသည်။
အောင်မြင်သော ချိတ်ဆက်မှုက ဘာကျန်ခဲ့သနည်း
ရရှိသော stream များသည် လိုဏ်ခေါင်းအတွင်းရှိ ဝန်ဆောင်မှု၏ ဒေတာကို သယ်ဆောင်သည်။ သင့် အပလီကေးရှင်း ဖတ်ပြီး လွှင့်ပစ်ရမည့် သီးခြား HTTP တုံ့ပြန်မှုကို ၎င်းတို့ မဖော်ပြပါ။ ဒုတိယ CONNECT ဖလှယ်မှုကို ထည့်ပါက JDK က လိုဏ်ခေါင်းကို တည်ဆောက်ပြီးဖြစ်ပြီးနောက် ဝန်ဆောင်မှုသို့ HTTP စာသား ပို့မည်ဖြစ်သည်။
ဥပမာသည် ချိတ်ဆက်မှု အချိန်ကန့်သတ်ချက်နှင့် socket ဖတ်ခြင်း အချိန်ကန့်သတ်ချက်ကို သတ်မှတ်သည်၊ ၎င်းတို့သည် သီးခြား ထိန်းချုပ်မှုများဖြစ်ပြီး အပလီကေးရှင်း session အတွက် တစ်ခုတည်းသော အလုံးစုံ သတ်မှတ်ချိန် မဟုတ်ပါ။
CONNECT ခွင့်ပြုချက်သည် proxy ၏ ပိုင်ဆိုင်မှု ဖြစ်နေဆဲပါ။ သာမန် ဝဘ် တောင်းဆိုမှုများကို ပေးပို့သော အဆုံးမှတ်သည် ဝန်ဆောင်မှု၏ port ကို ငြင်းပယ်နိုင်သည် သို့မဟုတ် လိုဏ်ခေါင်း မဖွင့်မီ အထောက်အထား စစ်ဆေးမှု တောင်းနိုင်သည်။ ထို မအောင်မြင်မှုများကို လိုဏ်ခေါင်းကို လက်ခံပြီးမှ သင့် အပလီကေးရှင်း ပရိုတိုကောကို ငြင်းပယ်သော ဆာဗာနှင့် သီးခြား ထားပါ။
ထို ပရိုတိုကောတွင် TLS လိုအပ်ပါက ချိတ်ဆက်ထားသော socket မှတစ်ဆင့် ဝန်ဆောင်မှု၏ ရည်ရွယ်ထားသော hostname နှင့် ပုံမှန် လက်မှတ် စစ်ဆေးမှုများဖြင့် TLS ညှိနှိုင်းပါ။ CONNECT တစ်ခုတည်းက stream ကို စာဝှက်မပေးပါ။ အစစ်အမှန် HTTP API အတွက် HTTP မက်ဆေ့ချ်များကိုပါ ကိုင်တွယ်သောကြောင့် HTTP client သည် ပိုမို အဆင်ပြေသော interface အဖြစ် ကျန်ရှိနေသည်။