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 ପ୍ରସ୍ତାବନା ଭୁଲ ସ୍ତରରେ ଆରମ୍ଭ ହୁଏ।