Untuk ssl::stream<tcp::socket> melalui proxy HTTP biasa, gunakan transport mentahnya sebelum memintanya melakukan TLS ke tujuan:

auto& transport = tlsStream.next_layer();
  1. Hubungkan transport tersebut ke host dan port proxy. Untuk tujuan HTTPS publik yang diizinkan tanpa kredensial proxy yang dikonfigurasi, daftar proxy HTTP menawarkan endpoint kandidat; periksa bahwa kandidat mengizinkan terowongan yang diminta.
  2. Kirim CONNECT dengan menyebut authority tujuan, seperti api.example:443, dan urai header respons lengkap pada transport mentah. 2xx yang berhasil membuka terowongan; penolakan tetap merupakan respons proxy HTTP.
  3. Konfigurasikan nama host tujuan, SNI yang diperlukan, akar kepercayaan, dan verifikasi rekan, lalu mulai handshake klien pada tlsStream.
  4. Setelah TLS berhasil, gunakan pembacaan dan penulisan stream SSL untuk aplikasi. Membaca lapisan berikutnya secara langsung pada titik itu melewati pemrosesan TLS.

Bawa kelebihan parser HTTP apa pun ke tahap berikutnya. Asio memiliki overload handshake yang di-buffer; membuang ekor milik parser dapat kehilangan byte yang sudah dibaca dari soket.

Dengan tipe sederhana ini, next_layer dan lowest_layer keduanya mencapai TCP. Lebih banyak pembungkus dapat membuat keduanya berbeda, jadi pilih antarmuka yang membawa protokol kabel proxy yang sebenarnya. Proxy HTTPS menambahkan tahap TLS lain dan berada di luar urutan CONNECT teks biasa ini.

Artikel terkait