HTTP/1.1 ப்ராக்ஸி CONNECT-க்குள் இலக்கின் HTTP/2 பிரேம்களை எடுத்துச் செல்ல முடியும். ப்ராக்ஸி அந்த உள் பிரேம்களை செயல்படுத்த வேண்டியதில்லை, ஆனால் கிளையண்ட் நெறிமுறை கைமாற்றங்களை வரிசையாகச் செய்ய வேண்டும்.

முழு CONNECT பதிலை சரிபார்த்து tunnelSocket வைத்த பிறகு, இலக்கு TLS சேர்த்து நிறுவப்பட்ட stream-ஐ 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 stream-ஐ திருப்பித் தருகிறது. இலக்கின் servername SNI மற்றும் சான்றிதழ் அடையாளத்தை வழங்குகிறது, சரிபார்ப்பு இயக்கத்தில் உள்ளது. ALPN சோதனை h2 பேசாத இலக்கை நிராகரிக்கிறது.

failRoute பாதையை சுத்தம் செய்ய வேண்டும்; useSession கோரிக்கைகள் மற்றும் அமர்வு மூடுதலை வைத்திருக்கிறது. இந்தப் பகுதியைச் சுற்றி இணைப்பு மற்றும் செயல்பாட்டு கால வரம்புகளைப் பயன்படுத்தவும்.

வெளி இணைப்பான் இன்னும் host:port CONNECT இலக்கு, ப்ராக்ஸி அங்கீகாரம், நிராகரிப்பு கையாளுதல் மற்றும் தலைப்புகளுக்குப் பின் இடையகப்படுத்தப்பட்ட பைட்டுகளை வைத்திருக்கிறது. சாக்கெட்டை TLS-க்குக் கொடுக்கும் முன் அவற்றை முடிக்கவும்; நேரடியாக HTTP/1.1 ப்ராக்ஸி கேட்பானுக்கு அனுப்பப்படும் HTTP/2 முன்னுரை தவறான அடுக்கில் தொடங்குகிறது.

தொடர்புடைய கட்டுரைகள்