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 ಪೀಠಿಕೆ ತಪ್ಪು ಪದರದಲ್ಲಿ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು