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 प्रस्तावना चुकीच्या स्तरावर सुरू होते.