สำหรับ ssl::stream<tcp::socket> ผ่านพร็อกซี HTTP ปกติ ให้ใช้ทรานสปอร์ตดิบก่อนที่จะให้มันทำ TLS ปลายทาง:

auto& transport = tlsStream.next_layer();
  1. เชื่อมต่อทรานสปอร์ตนั้นกับโฮสต์และพอร์ตของพร็อกซี เมื่อปลายทาง HTTPS สาธารณะที่ได้รับอนุญาตไม่มีข้อมูลรับรองพร็อกซีที่ตั้งไว้ รายการพร็อกซี HTTP มีปลายทางที่เป็นตัวเลือก; ตรวจสอบว่าตัวเลือกนั้นอนุญาตอุโมงค์ที่ขอ
  2. ส่ง CONNECT โดยระบุ authority ของปลายทาง เช่น api.example:443 และแยกวิเคราะห์ส่วนหัวการตอบกลับทั้งหมดบนทรานสปอร์ตธรรมดา การตอบ 2xx ที่สำเร็จจะเปิดอุโมงค์; การปฏิเสธยังคงเป็นการตอบกลับของพร็อกซี HTTP
  3. กำหนดค่าชื่อโฮสต์ปลายทาง, SNI ที่จำเป็น, รากที่เชื่อถือได้ และการตรวจสอบ peer แล้วเริ่มการจับมือฝั่งไคลเอนต์บน tlsStream
  4. หลัง TLS สำเร็จ ให้ใช้การอ่านและเขียนผ่านสตรีม SSL สำหรับแอปพลิเคชัน การอ่านเลเยอร์ล่างโดยตรง ณ จุดนั้นจะข้ามการประมวลผล TLS

นำข้อมูลส่วนเกินของตัวแยกวิเคราะห์ HTTP ไปยังขั้นถัดไป Asio มีโอเวอร์โหลดการจับมือแบบมีบัฟเฟอร์; การทิ้งส่วนท้ายที่ตัวแยกวิเคราะห์ถืออยู่อาจทำให้ไบต์ที่อ่านจากซ็อกเก็ตแล้วสูญหาย

ในชนิดง่าย ๆ นี้ next_layer และ lowest_layer ต่างก็ไปถึง TCP ตัวห่อเพิ่มเติมอาจทำให้ต่างกัน ดังนั้นให้เลือกอินเทอร์เฟซที่พาโปรโตคอลสายจริงของพร็อกซี พร็อกซี HTTPS เพิ่มขั้น TLS อีกขั้นและอยู่นอกลำดับ CONNECT แบบข้อความธรรมดานี้

บทความที่เกี่ยวข้อง