เซิร์ฟเวอร์ HTTP ของ Node จัดการคำขอพร็อกซีทั่วไปผ่าน callback ของคำขอ CONNECT ใช้เส้นทางอื่น: เซิร์ฟเวอร์ส่ง connect พร้อมกับคำขอ ไคลเอนต์ซ็อกเก็ต และ head buffer

เหตุการณ์นั้นคือการส่งมอบระหว่างการแยกวิเคราะห์ HTTP กับ tunnel ไม่มีออบเจกต์ ServerResponse ปกติให้ใช้ต่อสำหรับทราฟฟิกที่อุโมงค์แล้ว

อาร์กิวเมนต์สิ่งที่มันบรรทุก
reqคำขอ CONNECT รวมถึงอำนาจปลายทางและ headers
clientSocketการเชื่อมต่อกลับไปยังไคลเอนต์
headข้อมูล tunnel ที่ Node อ่านไปแล้วเลย headers HTTP อาจว่างเปล่า

จบการตัดสินใจ HTTP ก่อนส่งต่อไบต์

ตรวจสอบโฮสต์และพอร์ตที่ร้องขอ ใช้นโยบายการเข้าถึงและการรับรองความถูกต้องของพร็อกซี และสร้างการเชื่อมต่อต้นน้ำ CONNECT ระบุอำนาจเช่น service.example:443; แยกวิเคราะห์รูปแบบนั้นโดยคำนึงถึงอำนาจ IPv6 แทนการแบ่งแบบไม่ดูตาม้าตาเรือที่ทุกจุดทวิภาค

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

ตัวอย่าง tunnel อย่างเป็นทางการของ Node ดำเนินการส่งมอบนั้นด้วย serverSocket.write(head) ก่อนเชื่อมต่อทั้งสองทิศทางของสตรีม ตัวอย่างเล็ก ๆ ของมันแสดงให้เห็นการเปลี่ยนผ่าน พร็อกซีที่ปรับใช้จริงยังต้องการความพยายามเชื่อมต่อที่มีขอบเขต การควบคุมการเข้าถึง และการจัดการวงจรชีวิต

หลังจากสำเร็จ ไบต์เป็นของโปรโตคอลของบริการ

การตอบสนอง CONNECT ที่สำเร็จเปลี่ยนการเชื่อมต่อเป็นสตรีมไบต์ หากเป้าหมายเป็นเว็บไซต์ HTTPS การแลกเปลี่ยน TLS จะเดินทางภายในสตรีมนั้น การทำ tunnel เพียงอย่างเดียวไม่กำหนดให้พร็อกซีออกใบรับรองเว็บไซต์ทดแทน

ก่อนยอมรับ CONNECT ข้อผิดพลาด HTTP สามารถอธิบายเหตุผลที่ปฏิเสธได้ หลังยอมรับ การเขียน HTTP 500 ลงในสตรีมจะฉีดไบต์เข้าไปในโปรโตคอล tunnel แทนที่จะเป็นเช่นนั้น ให้สิ้นสุดหรือทำลายการเชื่อมต่อที่เหมาะสมเมื่อเกิดความล้มเหลวในภายหลัง

เชื่อมต่อทั้งสองทิศทางด้วย การจัดการสตรีมที่ตระหนักถึงแรงดันย้อนกลับ และตัดสินใจว่าเหตุการณ์ end, error และ close ยุติคู่ตรงข้ามอย่างไร รักษา head buffer เริ่มต้นไว้เป็นส่วนหนึ่งของแบบจำลองความเป็นเจ้าของเดียวกัน มันเป็นข้อมูลแอปพลิเคชัน ไม่ใช่ headers HTTP ส่วนเกินที่จะทิ้ง

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