Itifaki maalum ya TCP inaweza kusafiri kupitia proksi ya HTTP wakati proksi hiyo inaruhusu CONNECT kuelekea lengwa. Itifaki ya programu haitaji kuwa HTTP: HTTP huunda handaki, kisha programu hubadilishana baiti zake mwenyewe ndani yake.

OpenJDK 25 hutoa njia ya proksi ya HTTP katika Socket(Proxy). Utekelezaji wake hufanya mabadilishano ya CONNECT na hurudisha soketi iliyounganishwa kwa programu kutumia.

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();
}

Kipande hiki hutumia madaraja kutoka java.net na java.io. Badilisha ncha hizo mbili na ufanye mabadilishano ya itifaki kabla ya kuondoka kwenye kizuizi cha try. Kwa lengo la TCP la umma linaloruhusiwa, chagua waombaji wa HTTP kutoka orodha ya proksi za HTTP tu baada ya kukagua ruhusa ya CONNECT kwa bandari ya lengo hilo. Anwani ya proksi ni mahali ambapo Java huunganisha kwanza; anwani inayopitishwa kwa connect hutambulisha huduma ambayo proksi inapaswa kufikia.

Lengwa lisilosuluhishwa huhifadhi jina lake la mwenyeji kwa ombi la CONNECT la utekelezaji huu. InetSocketAddress iliyosuluhishwa badala yake hutoa anwani yake ya IP iliyosuluhishwa kwa ombi hilo. Tofauti hiyo ni muhimu wakati proksi inapaswa kusuluhisha jina la huduma au kutumia sera inayotegemea jina la mwenyeji.

Muunganisho uliofaulu hukuachia nini

Mikondo inayotokana hubeba data ya huduma iliyo ndani ya handaki. Haionyeshi jibu tofauti la HTTP ambalo programu yako inapaswa kusoma na kutupa. Kuongeza mabadilishano ya pili ya CONNECT kungemtumia huduma maandishi ya HTTP baada ya JDK kuwa tayari limeunda handaki.

Mfano huweka kikomo cha muda cha muunganisho na kikomo cha muda cha kusoma soketi; hizo ni vidhibiti tofauti, si tarehe moja ya mwisho kwa kipindi cha programu.

Ruhusa ya CONNECT bado ni ya proksi. Ncha inayosambaza maombi ya kawaida ya wavuti inaweza kukataa bandari ya huduma au kuhitaji uthibitishaji kabla ya kufungua handaki. Tenganisha kushindwa hizo na seva inayokubali handaki lakini baadaye inakataa itifaki ya programu yako.

Ikiwa itifaki hiyo inahitaji TLS, jadiliana TLS kupitia soketi iliyounganishwa kwa jina la mwenyeji linalokusudiwa la huduma na ukaguzi wa kawaida wa cheti. CONNECT peke yake haisimulii mkondo. Kwa HTTP API halisi, mteja wa HTTP hubaki kuwa kiolesura cha urahisi zaidi kwa sababu pia hushughulikia jumbe za HTTP.

Makala zinazohusiana