ສຳລັບ ssl::stream<tcp::socket> ຜ່ານ HTTP proxy ທຳມະດາ, ໃຊ້ transport ດິບຂອງມັນກ່ອນທີ່ຈະຂໍໃຫ້ມັນເຮັດ TLS ຫາປາຍທາງ:

auto& transport = tlsStream.next_layer();
  1. ເຊື່ອມ transport ນັ້ນກັບ host ແລະ port ຂອງ proxy. ສຳລັບປາຍທາງ HTTPS ສາທາລະນະທີ່ໄດ້ຮັບອະນຸຍາດ ໂດຍບໍ່ມີຂໍ້ມູນ proxy ຕັ້ງຄ່າ, ລາຍຊື່ proxy HTTP ສະເໜີ endpoint ຜູ້ສະໝັກ; ກວດສອບວ່າຜູ້ສະໝັກອະນຸຍາດ tunnel ທີ່ຮ້ອງຂໍ.
  2. ສົ່ງ CONNECT ໂດຍລະບຸ authority ຂອງປາຍທາງ, ເຊັ່ນ api.example:443, ແລະ ວິເຄາະ header ຕອບສະໜອງທັງໝົດເທິງ transport ດິບ. 2xx ທີ່ສຳເລັດເປີດ tunnel; ການປະຕິເສດຍັງເປັນການຕອບສະໜອງຂອງ HTTP proxy.
  3. ຕັ້ງຄ່າຊື່ host ຂອງປາຍທາງ, SNI ທີ່ຕ້ອງການ, ຮາກຄວາມໄວ້ໃຈ ແລະ ການກວດສອບ peer, ແລ້ວເລີ່ມ handshake ຂອງ client ເທິງ tlsStream.
  4. ຫຼັງຈາກ TLS ສຳເລັດ, ໃຊ້ການອ່ານ ແລະ ຂຽນ SSL stream ສຳລັບແອັບພລິເຄຊັນ. ການອ່ານຊັ້ນຕໍ່ໄປໂດຍກົງໃນຈຸດນັ້ນຂ້າມການປະມວນຜົນ TLS.

ນຳເອົາສ່ວນເກີນຂອງ HTTP parser ໄປສູ່ຂັ້ນຕອນຕໍ່ໄປ. Asio ມີ overload ຂອງ handshake ທີ່ມີ buffer; ການຖິ້ມຫາງທີ່ parser ເປັນເຈົ້າຂອງອາດເຮັດໃຫ້ໄບຕ໌ທີ່ອ່ານຈາກ socket ແລ້ວຫາຍໄປ.

ກັບປະເພດງ່າຍໆນີ້, next_layer ແລະ lowest_layer ທັງສອງຮອດ TCP. wrapper ເພີ່ມເຕີມອາດເຮັດໃຫ້ພວກມັນຕ່າງກັນ, ດັ່ງນັ້ນເລືອກ interface ທີ່ບັນຈຸ wire protocol ຕົວຈິງຂອງ proxy. HTTPS proxy ເພີ່ມຂັ້ນ TLS ອີກອັນໜຶ່ງ ແລະ ຢູ່ນອກລຳດັບ CONNECT ແບບ plaintext ນີ້.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ