Node.js HTTP/2 ta HTTP CONNECT da createConnection
Kammala CONNECT, yi shawarar TLS na manufa da h2, sannan yi amfani da createConnection don ajiye http2.connect kan wannan rafi.
Proxy na HTTP/1.1 zai iya ɗaukar firam ɗin HTTP/2 na manufa cikin CONNECT. Proxy ba dole ba ne ya aiwatar da waɗannan firam ɗin na ciki, amma abokin ciniki dole ne ya yi miƙa mulkin ka'ida a jere.
Bayan tabbatar da cikakken amsar CONNECT da riƙe tunnelSocket, ƙara TLS na manufa ka ba da rafin da aka kafa ga 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 yana mayar da rafin TLS da proxy ke ɗauka tukuna maimakon buɗe wani socket kai tsaye. servername na manufa yana ba da SNI da asalin takardar shaida, tare da kunna tabbatarwa. Binciken ALPN yana ƙin manufar da ba ta yi shawarar h2 ba.
failRoute dole ne ya tsaftace hanya; useSession ne ke da buƙatu da rufe zaman. Yi amfani da iyakokin lokaci na haɗi da aiki a kewayen wannan yanki.
Mai haɗa na waje har yanzu ne ke da niyya ta CONNECT host:port, tabbatarwa ga proxy, kula da ƙi da kuma bayt ɗin da aka ajiye bayan kanun kai. Kammala waɗannan kafin ba da socket ga TLS; gabatarwar HTTP/2 da aka aika kai tsaye zuwa mai sauraron proxy na HTTP/1.1 tana farawa a layin da ba daidai ba.