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 كىرىش سۆزى خاتا قاتلامدا باشلىنىدۇ.

مۇناسىۋەتلىك ماقالىلەر