Keempat protokol yang diberi label "proxy" hanya memiliki sedikit kesamaan selain namanya. Proxy HTTP mengurai Lapisan 7 dan menulis ulang header; proxy SOCKS sama sekali tidak membaca lalu lintas Anda. Perbedaan ini menentukan proxy mana yang cocok untuk penjelajahan, scraping, dan tunneling mentah.
Proxy HTTP
Proxy HTTP mengharapkan semantik HTTP. Proxy ini membuka permintaan, membaca URL, dapat melampirkan header seperti Via atau X-Forwarded-For, dan menolak apa pun yang bukan permintaan HTTP yang valid. Peramban, curl, dan sebagian besar pustaka scraping menggunakan proxy HTTP secara bawaan karena konfigurasinya pada dasarnya gratis — cukup atur satu variabel lingkungan atau berikan sebuah flag.
Biaya dari kesederhanaan itu adalah visibilitas. Proxy melihat URL lengkap, termasuk jalur dan string kueri, dan pada HTTP teks biasa ia juga melihat isi tubuh. Proxy caching dapat menulis ulang respons; proxy transparan dapat menghapus cookie. Perlakukan proxy HTTP apa pun sebagai perantara dengan hak penuh dan jangan pernah mengirim kredensial melalui teks biasa.
Proxy HTTPS dan Metode CONNECT
"Proxy HTTPS" adalah label yang sedikit menyesatkan. Ini merujuk pada proxy HTTP yang juga mengimplementasikan metode CONNECT. CONNECT memberi tahu proxy untuk membuka tunnel TCP mentah ke host tujuan dan mengirimkan byte di kedua arah; klien dan tujuan kemudian melakukan negosiasi TLS seolah-olah proxy tidak ada. Proxy melihat host dan port tujuan, serta volume byte, tetapi tidak melihat muatan.
Oleh karena itu, proxy yang "mendukung HTTPS" adalah proxy yang mendukung tunneling TLS, bukan proxy yang berjalan di atas TLS. Tautan dari mesin Anda ke proxy dapat berupa teks biasa atau terenkripsi secara independen. Jika Anda peduli dengan perlindungan tautan tersebut, gunakan implementasi SOCKS5-over-TLS atau proxy komersial berbayar yang mempublikasikan titik akhir TLS-nya.
SOCKS4
SOCKS4 adalah standar minimal tahun 1994: hanya TCP, hanya IPv4, tanpa UDP, tanpa IPv6, tanpa autentikasi, tanpa resolusi nama host di proxy. Jabat tangan terdiri dari enam byte ditambah satu byte kode respons. Protokol ini masih bertahan di dunia nyata karena ukurannya sangat kecil sehingga hampir semua alat yang sadar TCP dapat mengimplementasikannya dengan benar. Jika sebuah daftar mengiklankan SOCKS4, harapkan forwarding TCP mentah ke alamat IPv4 — dan tidak lebih.
SOCKS5
SOCKS5, yang didefinisikan dalam RFC 1928 (1996), adalah versi yang digunakan oleh sebagian besar perangkat modern. Versi ini menambahkan forwarding UDP, alamat IPv6, autentikasi GSSAPI, dan opsi untuk menyelesaikan nama host di proxy daripada di klien. Karena SOCKS5 tidak membuat asumsi tentang lapisan aplikasi yang berjalan di atasnya, ini adalah pilihan paling fleksibel untuk beban kerja non-HTTP: SSH, IRC, BitTorrent, RPC kustom.
Kinerja dan Overhead
Proxy SOCKS memiliki overhead per-permintaan yang lebih rendah karena tidak mengurai apa pun. Proxy HTTP dan HTTPS membayar untuk penguraian permintaan penuh pada setiap koneksi. Untuk satu sesi TLS yang berumur panjang di dalam CONNECT, perbedaannya dapat diabaikan. Untuk ribuan permintaan pendek di mana proxy membuka koneksi baru setiap kali, SOCKS5 menang secara terukur — biasanya 2–5 ms per permintaan untuk jalur penguraian.
Anonimitas, dalam Praktik
Proxy HTTP yang tidak menghapus header Anda dapat membocorkan IP klien Anda melalui Via, X-Forwarded-For, atau Forwarded. Proxy SOCKS tidak memiliki header semacam itu karena mereka tidak memiliki konsep header. Ini bukanlah fitur anonimitas melainkan ketiadaan permukaan kebocoran. Di dalam HTTPS yang ditunnelkan melalui CONNECT, tujuan hanya melihat jabat tangan TLS, sehingga kebocoran tingkat HTTP di proxy menjadi tidak relevan.
Konvensi Port
Anda akan melihat ini di direktori ini: 80, 8080, 3128, 8888 untuk HTTP; 443 untuk titik akhir yang secara eksplisit mendukung CONNECT; 1080 untuk SOCKS. Banyak penyedia mengekspos port tinggi non-standar (di atas 10.000) untuk menghindari pemindaian port biasa. Nomor port tidak mengatakan apa pun tentang kualitas — hanya menandakan apa yang dipilih operator untuk diekspos.