Node.js HTTP/2 kupitia HTTP CONNECT na createConnection
Kamilisha CONNECT, jadili TLS ya lengwa na h2, kisha tumia createConnection kuweka http2.connect kwenye mtiririko huo.
Proksi ya HTTP/1.1 inaweza kubeba fremu za HTTP/2 za lengwa ndani ya CONNECT. Proksi haihitaji kutekeleza fremu hizo za ndani, lakini mteja lazima afanye uhamishaji wa itifaki kwa mpangilio.
Baada ya kuthibitisha jibu kamili la CONNECT na kutunza tunnelSocket, ongeza TLS ya lengwa na ukabidhi mtiririko ulioanzishwa kwa 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 hurudisha mtiririko wa TLS ambao proksi tayari inaubeba badala ya kufungua soketi nyingine ya moja kwa moja. servername ya lengwa hutoa SNI na utambulisho wa cheti, huku uthibitishaji ukiwa umewashwa. Ukaguzi wa ALPN hukataa lengwa ambalo halikujadili h2.
failRoute lazima isafishe njia; useSession inamiliki maombi na kufunga kikao. Tumia muda wa mwisho wa muunganisho na uendeshaji kuzunguka kipande hiki.
Kiunganishi cha nje bado kinamiliki ulengaji wa CONNECT host:port, uthibitishaji kwa proksi, utunzaji wa kukataa na baiti zilizohifadhiwa baada ya vichwa. Kamilisha hizo kabla ya kukabidhi soketi kwa TLS; utangulizi wa HTTP/2 unaotumwa moja kwa moja kwa kiskiliza proksi cha HTTP/1.1 huanza kwenye tabaka lisilofaa.