createConnection арқылы HTTP CONNECT бойынша Node.js HTTP/2
CONNECT-ті аяқтап, мақсатты TLS-ті h2-мен келісіп, содан кейін http2.connect-ті сол ағында ұстау үшін createConnection қолданыңыз.
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 кіріспесі қате қабаттан басталады.