HTTPQUERY
Bahasa Indonesia

CONNECT

Penggunaan

Permintaan CONNECT memberi tahu sebuah proxy HTTP untuk membangun koneksi TCP ke host dan port yang ditentukan, lalu meneruskan byte mentah ke kedua arah. Target permintaan menggunakan bentuk authority (host:port) alih-alih sebuah path.

Penggunaan utama CONNECT adalah tunneling HTTPS. Ketika sebuah klien di balik proxy perlu menjangkau situs HTTPS, urutannya berjalan sebagai berikut:

Karena proxy meneruskan byte mentah setelah terowongan terbentuk, proxy tidak memiliki visibilitas terhadap lalu lintas terenkripsi tersebut. Inilah mekanisme yang digunakan proxy korporat dan jaringan untuk mengizinkan akses HTTPS ke server eksternal.

Jika proxy membutuhkan autentikasi, klien menyertakan header Proxy-Authorization di dalam permintaan CONNECT. Kredensial yang hilang atau tidak valid menghasilkan respons 407 Proxy Authentication Required.

WHATWG Fetch Standard mencantumkan CONNECT sebagai metode terlarang, sehingga JavaScript tidak dapat mengeluarkan permintaan CONNECT melalui API browser.

Pada HTTP/2 dan HTTP/3, CONNECT membuat terowongan di atas satu stream alih-alih keseluruhan koneksi TCP. Spesifikasi HTTP/2 mendefinisikan CONNECT dasar untuk stream individual. Peningkatan protokol extended CONNECT menambahkan pseudo-header :protocol yang memungkinkan WebSockets dan protokol lain berjalan di atas koneksi termultipleks, dengan dukungan pada HTTP/2 maupun HTTP/3. Terowongan stream dasar dan extended CONNECT saling melengkapi: yang satu menyediakan tunneling mentah, yang lain memungkinkan protokol non-TCP di atas koneksi termultipleks.

Terowongan HTTPS melalui proxy

Sebuah klien meminta terowongan TLS ke example.com pada port 443 melalui sebuah proxy. Proxy mengautentikasi klien menggunakan header Proxy-Authorization, membuka koneksi TCP, dan mengonfirmasi dengan 200 OK.

Permintaan

CONNECT example.com:443 HTTP/1.1
Host: example.com:443
Proxy-Authorization: Basic dXNlcjpwYXNz

Respons

HTTP/1.1 200 Connection Established

Setelah menerima respons 200, klien memulai handshake TLS dengan example.com melalui terowongan yang terbuka. Proxy meneruskan semua data berikutnya tanpa memeriksa atau memodifikasi kontennya.

Terowongan tanpa autentikasi

Ketika proxy tidak membutuhkan kredensial, permintaan hanya berisi host dan port tujuan.

Permintaan

CONNECT example.com:443 HTTP/1.1
Host: example.com:443

Respons

HTTP/1.1 200 Connection Established

CORS

CONNECT adalah metode terlarang bagi CORS. Browser memblokir semua upaya mengirim CONNECT melalui API browser seperti fetch() dan XMLHttpRequest.

Tunneling HTTP

Tunneling HTTP mengenkapsulasi lalu lintas non-HTTP di dalam pesan HTTP, sehingga protokol seperti HTTPS, SSH, dan FTP dapat melintasi proxy HTTP. CONNECT adalah mekanisme utama untuk membangun terowongan semacam itu. Proxy membuka koneksi TCP mentah ke host dan port tujuan, lalu meneruskan byte secara dua arah tanpa memeriksa kontennya.

Tanpa proxy di antara klien dan server, CONNECT tidak diperlukan. Klien terhubung langsung ke server menggunakan protokol tujuan.

Keamanan

Proxy terbuka yang menerima CONNECT ke port sembarang membuka peluang penyalahgunaan: relai spam melalui SMTP (port 25), pemindaian port jaringan internal, dan penembusan kontrol akses jaringan. Proxy produksi membatasi CONNECT ke port 443 (HTTPS) atau ke daftar putih tujuan yang disetujui.

OWASP mengidentifikasi CONNECT tanpa pembatasan sebagai risiko keamanan. WHATWG Fetch Standard mengklasifikasikan CONNECT sebagai metode terlarang, sehingga browser tidak dapat mengirim permintaan CONNECT secara langsung melalui fetch() atau XMLHttpRequest.