createConnection सहित HTTP CONNECT मार्फत Node.js HTTP/2
CONNECT पूरा गर्नुहोस्, h2 सँग गन्तव्य TLS वार्ता गर्नुहोस्, त्यसपछि createConnection प्रयोग गरी http2.connect त्यही स्ट्रिममा राख्नुहोस्।
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 प्रस्तावना गलत तहमा सुरु हुन्छ।