createConnection ৰ সৈতে HTTP CONNECT ৰ জৰিয়তে Node.js HTTP/2
CONNECT সম্পূৰ্ণ কৰক, h2 ৰ সৈতে গন্তব্য TLS ত আলোচনা কৰক, তাৰ পিছত 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 প্ৰিফেক্স ভুল স্তৰত আৰম্ভ হয়।