ส่วนหน้า SOCKS5 สามารถใช้พร็อกซี HTTP เป็นการขนส่งต่อไปของตนได้ มันทำหน้าที่เป็นเซิร์ฟเวอร์ SOCKS ต่อไคลเอนต์ และเป็นไคลเอนต์ HTTP CONNECT ต่อต้นทาง การแลกเปลี่ยนควบคุมทั้งสองจบลงก่อนที่สตรีมของแอปพลิเคชันจะเริ่ม

คำขอ SOCKS CONNECT ให้โฮสต์หรือที่อยู่ปลายทางและพอร์ตอยู่แล้ว สำหรับตัวอย่างการแลกเปลี่ยน HTTP/1.1 กับต้นทาง:

client → adapter: SOCKS5 CONNECT service.example.net:443
adapter → parent:
    CONNECT service.example.net:443 HTTP/1.1
    Host: service.example.net:443

parent → adapter: HTTP/1.1 200 Connection Established
                 [end of headers]
adapter → client: SOCKS5 success reply

client ↔ adapter ↔ parent ↔ service: application bytes

แปลผลลัพธ์ที่ขอบเขต

อะแดปเตอร์ทำการยืนยันตัวตนใด ๆ ที่ต้นทางต้องการให้เสร็จและรอผลของ CONNECT คำตอบ 2xx ที่สำเร็จจะสร้างอุโมงค์ไปยังต้นทาง จากนั้นจึงควรส่งคำตอบความสำเร็จ SOCKS ที่สอดคล้องกลับไปยังไคลเอนต์ปลายน้ำ

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

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

รักษาไบต์หลังหัวเรื่อง

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

หลังจากส่งคำตอบความสำเร็จ SOCKS แล้ว ส่งสตรีมของแอปพลิเคชันไปทั้งสองทิศทาง อะแดปเตอร์ไม่จำเป็นต้องสลับข้อความไคลเอนต์หนึ่งกับข้อความเซิร์ฟเวอร์หนึ่ง และไม่จำเป็นต้องเข้าใจเรกคอร์ด TLS เพื่อส่งต่อ งานด้านโพรโทคอลของมันคือการสร้างและแปลการเจรจาอุโมงค์ทั้งสอง

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