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/2 پېژندنه چې مستقیم HTTP/1.1 پراکسي اورېدونکي ته لېږل کیږي په غلط طبقه کې پیل کیږي.