የJava Socket HTTP CONNECT ዋሻዎች በOpenJDK 25 ውስጥ
በOpenJDK 25 ውስጥ ያለውን የHTTP proxy ሶኬት መንገድ ተጠቅመው የተፈቀደ TCP አገልግሎት ለመድረስ፣ የproxy መጨረሻ ነጥብና መድረሻ ግን ለየብቻ ሆነው እንዲቆዩ።
ብጁ የTCP ፕሮቶኮል ወደ መድረሻው CONNECT ሲፈቅድ በHTTP proxy በኩል ማለፍ ይችላል። የመተግበሪያው ፕሮቶኮል HTTP መሆን የለበትም፦ HTTP ዋሻውን ይመሠርታል፣ ከዚያም መተግበሪያው የራሱን ባይት በውስጡ ይለዋወጣል።
OpenJDK 25 በSocket(Proxy) ውስጥ የHTTP proxy መንገድ ይሰጣል። አተገባበሩ የCONNECT ልውውጡን ያከናውንና መተግበሪያው እንዲጠቀምበት የተገናኘ ሶኬት ይመልሳል።
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 ክፍሎችን ይጠቀማል። ሁለቱን መጨረሻ ነጥቦች ቀይረው የtry ብሎኩን ከመውጣትዎ በፊት የፕሮቶኮሉን ልውውጥ ያከናውኑ። ለተፈቀደ ይፋዊ የTCP ዒላማ፣ የዚያ ዒላማ ወደብ CONNECT ፈቃድ ካረጋገጡ በኋላ ብቻ ከHTTP proxy ዝርዝር የHTTP እጩዎችን ይምረጡ። የproxy አድራሻ Java በመጀመሪያ የሚገናኝበት ቦታ ነው፤ ለconnect የሚሰጠው አድራሻ ደግሞ proxyው መድረስ ያለበትን አገልግሎት ይለያል።
ያልተፈታው መድረሻ ለዚህ አተገባበር CONNECT ጥያቄ የአስተናጋጅ ስሙን ይጠብቃል። የተፈታ InetSocketAddress ግን በምትኩ የተፈታውን IP አድራሻ ለዚያ ጥያቄ ያቀርባል። ይህ ልዩነት proxyው የአገልግሎቱን ስም መፍታት ሲኖርበት ወይም በአስተናጋጅ ስም ላይ የተመሠረተ ፖሊሲ ሲተገበር ያስፈልጋል።
የተሳካ ግንኙነት ምን ይተውልዎታል
የተገኙት ፍሰቶች በዋሻው ውስጥ ያለውን የአገልግሎቱን ውሂብ ይይዛሉ። መተግበሪያዎ አንብቦ የሚጥለው የተለየ የHTTP ምላሽ አያሳዩም። ሁለተኛ የCONNECT ልውውጥ መጨመር JDK ዋሻውን ከመሠረተ በኋላ የHTTP ጽሑፍ ወደ አገልግሎቱ ይልካል።
ምሳሌው የግንኙነት ጊዜ ገደብና የሶኬት ንባብ ጊዜ ገደብ ይሰጣል፤ እነዚህ ለየብቻ መቆጣጠሪያዎች ናቸው፣ ለመተግበሪያው ክፍለ ጊዜ አንድ አጠቃላይ የመጨረሻ ቀነ ገደብ አይደሉም።
የCONNECT ፈቃድ አሁንም የproxyው ነው። የተራ የድረ-ገጽ ጥያቄዎችን የሚያስተላልፍ መጨረሻ ነጥብ የአገልግሎቱን ወደብ ሊከልክል ወይም ዋሻ ከመክፈቱ በፊት ማረጋገጫ ሊጠይቅ ይችላል። እነዚያን ውድቀቶች ዋሻውን ከተቀበለ በኋላ ግን የመተግበሪያ ፕሮቶኮልዎን ከሚክድ አገልጋይ ለዩ።
ያ ፕሮቶኮል TLS ከፈለገ፣ TLSን በተገናኘው ሶኬት በኩል ከአገልግሎቱ የታሰበ አስተናጋጅ ስምና የተለመዱ የምስክር ወረቀት ማረጋገጫዎች ጋር ይደራደሩ። CONNECT ብቻውን ፍሰቱን አያመሳስልም። ለእውነተኛ የHTTP API፣ የHTTP ደንበኛ የHTTP መልእክቶችንም ስለሚያስተናግድ የበለጠ ምቹ ገጽታ ሆኖ ይቆያል።