โปรโตคอลทั้งสี่ที่ถูกระบุว่าเป็น "พร็อกซี" นั้นแทบไม่มีอะไรเหมือนกันเลยนอกจากชื่อ พร็อกซี HTTP จะแยกวิเคราะห์เลเยอร์ 7 และเขียนส่วนหัวใหม่ ส่วนพร็อกซี SOCKS จะไม่อ่านทราฟฟิกของคุณเลย ความแตกต่างนี้เป็นตัวกำหนดว่าพร็อกซีแบบไหนเหมาะกับการท่องเว็บ การสคราปข้อมูล และการทำอุโมงค์แบบดิบ
พร็อกซี HTTP
พร็อกซี HTTP คาดหวังความหมายของ HTTP มันจะเปิดคำขอ อ่าน URL สามารถแนบส่วนหัวเช่น Via หรือ X-Forwarded-For และปฏิเสธสิ่งใดก็ตามที่ไม่ใช่คำขอ HTTP ที่ถูกต้อง เบราว์เซอร์ curl และไลบรารีสำหรับสคราปส่วนใหญ่จะใช้พร็อกซี HTTP เป็นค่าเริ่มต้น เนื่องจากการกำหนดค่านั้นแทบไม่มีค่าใช้จ่าย — แค่ตั้งค่าตัวแปรสภาพแวดล้อมตัวเดียวหรือส่งแฟล็ก
ต้นทุนของความเรียบง่ายนั้นคือการมองเห็น พร็อกซีจะเห็น URL เต็ม รวมถึงพาธและสตริงคำค้นหา และใน HTTP ข้อความธรรมดาก็จะเห็นบอดี้ด้วย พร็อกซีแบบแคชสามารถเขียนการตอบสนองใหม่ได้ พร็อกซีแบบโปร่งใสสามารถลบคุกกี้ได้ ให้ถือว่าพร็อกซี HTTP ทุกตัวเป็นตัวกลางที่มีสิทธิ์เต็ม และอย่าส่งข้อมูลรับรองผ่านข้อความธรรมดาเด็ดขาด
พร็อกซี HTTPS และเมธอด CONNECT
"พร็อกซี HTTPS" เป็นป้ายชื่อที่ทำให้เข้าใจผิดเล็กน้อย มันหมายถึงพร็อกซี HTTP ที่ใช้เมธอด CONNECT เพิ่มเติม CONNECT บอกให้พร็อกซีเปิดอุโมงค์ TCP ดิบไปยังโฮสต์เป้าหมายและส่งต่อไบต์ทั้งสองทิศทาง จากนั้นไคลเอ็นต์และปลายทางจะเจรจา TLS ราวกับว่าพร็อกซีไม่ได้อยู่ตรงนั้น พร็อกซีจะเห็นโฮสต์และพอร์ตปลายทาง รวมถึงปริมาณไบต์ แต่ไม่เห็นเพย์โหลด
ดังนั้นพร็อกซีที่ "รองรับ HTTPS" จึงเป็นพร็อกซีที่ รองรับการทำอุโมงค์ TLS ไม่ใช่พร็อกซีที่ทำงานผ่าน TLS เอง ลิงก์จากเครื่องของคุณไปยังพร็อกซีอาจเป็นข้อความธรรมดาหรือเข้ารหัสก็ได้โดยอิสระ หากคุณกังวลว่าลิงก์นั้นจะได้รับการปกป้อง ให้ใช้การใช้งาน SOCKS5 ผ่าน TLS หรือพร็อกซีเชิงพาณิชย์แบบเสียเงินที่เผยแพร่ปลายทาง TLS ของตน
SOCKS4
SOCKS4 คือมาตรฐานขั้นต่ำจากปี 1994: TCP เท่านั้น, IPv4 เท่านั้น, ไม่มี UDP, ไม่มี IPv6, ไม่มีการตรวจสอบสิทธิ์, ไม่มีการแก้ไขชื่อโฮสต์ที่พร็อกซี การจับมือกันใช้เวลา 6 ไบต์บวกรหัสตอบกลับ 1 ไบต์ มันยังคงมีอยู่ในโลกจริงเพราะโปรโตคอลมีขนาดเล็กมากจนเครื่องมือที่รองรับ TCP แทบทุกตัวสามารถนำไปใช้ได้อย่างถูกต้อง หากลิสต์ใดโฆษณาว่ารองรับ SOCKS4 ให้คาดหวังการส่งต่อ TCP ดิบไปยังที่อยู่ IPv4 — และไม่มีอะไรอื่น
SOCKS5
SOCKS5 ซึ่งกำหนดไว้ใน RFC 1928 (1996) เป็นเวอร์ชันที่เครื่องมือสมัยใหม่ส่วนใหญ่ใช้ มันเพิ่มการส่งต่อ UDP, ที่อยู่ IPv6, การตรวจสอบสิทธิ์ GSSAPI และตัวเลือกในการแก้ไขชื่อโฮสต์ที่พร็อกซีแทนที่จะเป็นที่ไคลเอ็นต์ เนื่องจาก SOCKS5 ไม่ได้ตั้งสมมติฐานใด ๆ เกี่ยวกับเลเยอร์แอปพลิเคชันที่ทำงานอยู่ด้านบน มันจึงเป็นตัวเลือกที่ยืดหยุ่นที่สุดสำหรับงานที่ไม่ใช่ HTTP: SSH, IRC, BitTorrent, RPC แบบกำหนดเอง
ประสิทธิภาพและโอเวอร์เฮด
พร็อกซี SOCKS มีโอเวอร์เฮดต่อคำขอน้อยกว่าเพราะไม่ต้องแยกวิเคราะห์อะไรเลย พร็อกซี HTTP และ HTTPS จ่ายค่าแยกวิเคราะห์คำขอเต็มรูปแบบทุกครั้งที่มีการเชื่อมต่อ สำหรับเซสชัน TLS อายุยาวเดียวภายใน CONNECT ความแตกต่างนั้นเล็กน้อยมาก สำหรับคำขอสั้น ๆ หลายพันรายการที่พร็อกซีเปิดการเชื่อมต่อใหม่ทุกครั้ง SOCKS5 จะชนะอย่างเห็นได้ชัด — โดยทั่วไป 2–5 มิลลิวินาทีต่อคำขอสำหรับเส้นทางการแยกวิเคราะห์
การไม่เปิดเผยตัวตนในทางปฏิบัติ
พร็อกซี HTTP ที่ไม่ลบส่วนหัวของคุณอาจรั่วไหลที่อยู่ IP ของไคลเอ็นต์ผ่าน Via, X-Forwarded-For หรือ Forwarded พร็อกซี SOCKS ไม่มีส่วนหัวดังกล่าวเพราะไม่มีแนวคิดเรื่องส่วนหัว นั่นไม่ใช่ฟีเจอร์การไม่เปิดเผยตัวตนมากเท่ากับการไม่มีพื้นผิวที่รั่วไหล ภายใน HTTPS ที่ทำอุโมงค์ผ่าน CONNECT ปลายทางจะเห็นเฉพาะการจับมือ TLS เท่านั้น ดังนั้นการรั่วไหลในระดับ HTTP ที่พร็อกซีจึงไม่มีความหมาย
ธรรมเนียมปฏิบัติของพอร์ต
คุณจะเห็นพอร์ตเหล่านี้ในไดเรกทอรีนี้: 80, 8080, 3128, 8888 สำหรับ HTTP; 443 สำหรับปลายทางที่รองรับ CONNECT อย่างชัดเจน; 1080 สำหรับ SOCKS ผู้ให้บริการหลายรายเปิดเผยพอร์ตสูงที่ไม่ได้มาตรฐาน (สูงกว่า 10,000) เพื่อหลีกเลี่ยงการสแกนพอร์ตแบบไม่เป็นทางการ หมายเลขพอร์ตไม่ได้บอกอะไรเกี่ยวกับคุณภาพ — มันแค่ส่งสัญญาณว่าผู้ให้บริการเลือกที่จะเปิดเผยอะไร