createConnection ile HTTP CONNECT üzerinden Node.js HTTP/2
CONNECT'i tamamlayın, hedef TLS'ini h2 ile görüşün, ardından http2.connect'i o akışta tutmak için createConnection kullanın.
Bir HTTP/1.1 vekili, hedefin HTTP/2 çerçevelerini CONNECT içinde taşıyabilir. Vekilin bu iç çerçeveleri uygulaması gerekmez, ancak istemci protokol geçişlerini sırayla yapmalıdır.
tam CONNECT yanıtını doğrulayıp tunnelSocket değerini koruduktan sonra hedef TLS'i ekleyin ve kurulan akışı HTTP/2'ye verin:
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, başka bir doğrudan soket açmak yerine vekilin hâlihazırda taşıdığı TLS akışını döndürür. Hedefin servername değeri SNI ve sertifika kimliğini sağlar; doğrulama etkindir. ALPN denetimi h2 üzerinde anlaşmayan hedefi reddeder.
failRoute rotayı temizlemelidir; useSession istekleri ve oturum kapanışını yönetir. Bu parçanın çevresine bağlantı ve işlem süre sınırları uygulayın.
Dış bağlayıcı hâlâ host:port CONNECT hedeflemesini, vekil kimlik doğrulamasını, ret işlemeyi ve başlıklardan sonra tamponlanan baytları yönetir. Soketi TLS'e vermeden önce bunları bitirin; doğrudan bir HTTP/1.1 vekil dinleyicisine gönderilen HTTP/2 başlangıcı yanlış katmanda başlar.