ប្រូកស៊ី HTTP/1.1 អាចដឹក ស៊ុម HTTP/2 របស់គោលដៅនៅក្នុង CONNECT។ ប្រូកស៊ីមិនចាំបាច់អនុវត្តស៊ុមខាងក្នុងទាំងនោះទេ ប៉ុន្តែអតិថិជនត្រូវធ្វើការផ្ទេរពិធីការតាមលំដាប់។

បន្ទាប់ពីផ្ទៀងផ្ទាត់ ការឆ្លើយតប 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 គ្រប់គ្រងសំណើ និងការបិទសម័យ។ អនុវត្តកាលកំណត់នៃការតភ្ជាប់ និងប្រតិបត្តិការជុំវិញផ្នែកនេះ។

ឧបករណ៍ភ្ជាប់ខាងក្រៅនៅតែគ្រប់គ្រងគោលដៅ CONNECT host:port ការផ្ទៀងផ្ទាត់ជាមួយប្រូកស៊ី ការគ្រប់គ្រងការបដិសេធ និងបៃដែលបានឃ្លាំងបន្ទាប់ពីក្បាល។ បញ្ចប់ពួកវាមុនពេលប្រគល់សុខទៅ TLS; អារម្ភកថា HTTP/2 ដែលផ្ញើផ្ទាល់ទៅអ្នកស្តាប់ប្រូកស៊ី HTTP/1.1 ចាប់ផ្តើមនៅស្រទាប់ខុស។

អត្ថបទពាក់ព័ន្ធ