א 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 איז בעל־הבית אויף די בקשות און שליסן דעם סעסיע. לייג ארויף צייט־גרענעצן פאר פארבינדונג און אפעראציע ארום דעם שטיקל.

דער אינדרויסנדיקער קאנעקטאר איז נאך אלץ בעל־הבית אויף host:port CONNECT צילן, פראקסי־אויטענטיפיקאציע, באהאנדלען אפווארפן און די בייטעס געבופפערט נאך די קעפלעך. ענדיק דאס איידער דו גיבסט דעם סאקעט צו TLS; אן HTTP/2 אריינפיר וואס ווערט געשיקט גראד צו אן HTTP/1.1 פראקסי־צוהערער הייבט אן אויף דער אומרעכטער שיכטע.

פֿאַרבונדענע אַרטיקלען