Node.js HTTP/2 iyada oo loo marayo HTTP CONNECT iyo createConnection
Dhammee CONNECT, kala xaajoo TLS-ka meesha loo socdo h2, ka dibna isticmaal createConnection si http2.connect uu ku sii jiro isla qulqulkaas.
Proxy HTTP/1.1 waxa uu qaadi karaa frames-ka HTTP/2 ee meesha loo socdo gudaha CONNECT. Proxy-gu uma baahna in uu hirgeliyo frames-kaas gudaha ah, laakiin macmiilku waa in uu isku xigxig u sameeyaa wareejinta borotokoolka.
Ka dib markaad xaqiijiso jawaabta CONNECT oo dhamaystiran oo aad haysato tunnelSocket, ku dar TLS-ka meesha loo socdo oo u dhiibo qulqulka la aasaasay 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 waxa uu soo celiyaa qulqulka TLS ee proxy-gu horey u qaadayay halkii uu furi lahaa socket kale oo toos ah. servername-ka meesha loo socdo waxa uu bixiyaa SNI iyo aqoonsiga shahaadada, iyada oo xaqiijintu furan tahay. Baaritaanka ALPN waxa uu diidaa meel aan ka wada hadlin h2.
failRoute waa in uu nadiifiyo dariiqa; useSession ayaa leh codsiyada iyo xidhitaanka fadhiga. Ku dhaqan geli waqtiyada xidhiidhka iyo hawlgalka hareeraha qaybtan.
Isku-xiraha dibadda waxa uu weli leeyahay bartilmaameedka CONNECT host:port, xaqiijinta proxy-ga, maaraynta diidmada iyo baytiyada la kaydiyay ka dib madaxyada. Dhammee kuwaas ka hor inta aanad socket-ka siin TLS; horudhaca HTTP/2 ee si toos ah loo diro dhagaystaha proxy HTTP/1.1 waxa uu ka bilaabmaa lakabka qaldan.