Node.js HTTP/2 በHTTP CONNECT በኩል በcreateConnection
CONNECT ን ጨርስ፣ የመዳረሻ TLS ን በh2 ተደራደር፣ ከዚያ createConnection ተጠቅመህ http2.connect በዚያ ዥረት ላይ አቆይ።
የHTTP/1.1 ፕሮክሲ በCONNECT ውስጥ የመዳረሻ HTTP/2 ፍሬሞችን ማስተላለፍ ይችላል። ፕሮክሲው እነዚያን ውስጣዊ ፍሬሞች መተግበር አያስፈልገውም፣ ነገር ግን ደንበኛው የፕሮቶኮል ሽግግሮችን በቅደም ተከተል ማከናወን አለበት።
ሙሉውን የCONNECT መልስ ካረጋገጡ እና tunnelSocket ን ካቆዩ በኋላ፣ የመዳረሻ TLS ይጨምሩ እና የተመሠረተውን ዥረት ለHTTP/2 ይስጡ፦
import tls from 'node:tls';
import http2 from 'node:http2';
const secureSocket = tls.connect({
socket: tunnelSocket,
servername: 'api.example',
ALPNProtocols: ['h2'],
});
secureSocket.once('error', failRoute);
secureSocket.once('secureConnect', () => {
if (secureSocket.alpnProtocol !== 'h2') {
secureSocket.destroy();
failRoute(new Error('Destination did not negotiate h2'));
return;
}
const session = http2.connect('https://api.example', {
createConnection: () => secureSocket,
});
session.on('error', failRoute);
useSession(session);
});createConnection ሌላ ቀጥተኛ ሶኬት ከመክፈት ይልቅ በፕሮክሲው የሚሸከመውን የTLS ዥረት ይመልሳል። የመዳረሻው servername SNI እና የምስክር ወረቀት ማንነትን ያቀርባል፣ ማረጋገጫ ነቅቷል። የALPN ምርመራ h2 ያልተደራደረ መዳረሻን ይገታል።
failRoute መንገዱን ማጽዳት አለበት፤ useSession ጥያቄዎችንና የክፍለ ጊዜ መዝጊያን ይይዛል። በዚህ ክፍል ዙሪያ የግንኙነትና የአሠራር ጊዜ ገደቦችን ይተግብሩ።
የውጭው አገናኝ አሁንም የhost:port CONNECT ኢላማ፣ የፕሮክሲ ማረጋገጫ፣ የውድቅ አያያዝ እና ከራስጌዎቹ በኋላ የተጠራቀመውን ባይት ይይዛል። ሶኬቱን ለTLS ከመስጠትዎ በፊት እነዚህን ያጠናቅቁ፤ በቀጥታ ወደ HTTP/1.1 ፕሮክሲ አድማጭ የሚላክ የHTTP/2 መግቢያ በተሳሳተ ንብርብር ይጀምራል።