การแปลคำขอ SOCKS5 ให้เป็นอุโมงค์ HTTP
ทำการแลกเปลี่ยน CONNECT กับต้นทางให้เสร็จ ส่งคำตอบ SOCKS กลับไปยังไคลเอนต์ แล้วจึงส่งไบต์ของแอปพลิเคชัน
ส่วนหน้า 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 เพื่อส่งต่อ งานด้านโพรโทคอลของมันคือการสร้างและแปลการเจรจาอุโมงค์ทั้งสอง