Node.js HTTP/2 តាមរយៈ HTTP CONNECT ជាមួយ createConnection
បញ្ចប់ CONNECT ចរចា TLS គោលដៅជាមួយ h2 បន្ទាប់មកប្រើ createConnection ដើម្បីរក្សា http2.connect នៅលើស្ទ្រីមនោះ។
ប្រូកស៊ី 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 ចាប់ផ្តើមនៅស្រទាប់ខុស។