Bagaimana tepatnya cara kerja proxy?

12

Jika saya ingin terhubung dengan mengatakan, IP 100.100.100.100, Port 80, komputer saya akan mengirim paket tcp dengan alamat ini ke dalam kawat.

Sekarang Jika saya menggunakan server proxy katakan, Port 20080.200.200.200 (semacam proxy yang dapat Anda atur di internet explorer) bagaimana proses ini diubah?

Ketika saya masih ingin terhubung ke IP yang sama, apakah header IP akan menyertakan IP tujuan atau IP proxy atau keduanya?

Saya sudah googled, ada ratusan halaman yang memberi tahu Anda cara mengatur proxy tetapi tidak ada yang menjelaskan cara kerjanya di bawah tenda.

cody
sumber

Jawaban:

13

Permintaan HTTP dikirim dari Klien ke port 8080 dari Proxy Server. Proxy Server kemudian memunculkan permintaan HTTP baru ke situs tujuan. Proxy, tergantung pada konfigurasi, akan sering menambahkan header "X-Forwarded-For" ke permintaan HTTP. File log di situs web tujuan akan menunjukkan alamat IP proxy, tetapi mungkin atau mungkin tidak dikonfigurasi untuk mencatat alamat "X-Forwarded-For".

Itu konfigurasi tipikal, tetapi perangkat lunak proxy akan memungkinkan Anda semua jenis penyesuaian.

EDIT: Saya harus mencatat bahwa ketika saya awalnya membaca pertanyaan Anda, saya mendapat ide yang Anda tanyakan tentang Proxy HTTP khusus, seperti squid atau nginx. Ada banyak jenis proxy yang tersedia. Di Internet Explorer, kemungkinan besar Anda akan menggunakan proxy HTTP, tetapi ada banyak jenis lain juga.

emgee
sumber
Ya, itu sangat tergantung pada perangkat lunak yang Anda gunakan sebagai server proxy dan bagaimana hal itu dikonfigurasi. Lihat, misalnya, HttpProxyModule untuk Nginx: wiki.nginx.org/HttpProxyModule
entropo
3
Jika permintaan dikirim hanya ke server proxy, bagaimana proxy itu tahu alamat tujuan yang ingin saya sambungkan? Apakah proxy berfungsi di level http atau di level tcp?
cody
Browser yang membuat permintaan ke proxy meminta URI lengkap. Server proxy kemudian melakukan pencarian DNS dan memulai permintaan HTTPnya sendiri ke situs target.
emgee
1
Proxy http, seperti Squid (yang menjadi dasar jawaban saya) bekerja pada lapisan aplikasi.
emgee
1
@emgee: Protokol HTTP juga memiliki metode CONNECT, sehingga dimungkinkan untuk terhubung melalui proxy HTTP ke server TCP (jika proxy membolehkannya) dan server TCP tidak harus menjadi server yang berbicara HTTP.
vtest
2

HTTP adalah protokol Layer 7 jadi jangan bingung. ketika Anda menggunakan proxy HTTP dan Anda mengetik katakan google.com, header HTTP masih sama google.com, tetapi alamat IP tujuan akan menjadi alamat IP dari Proxy, sumber akan menjadi Hosts IP ke nomor port yang disesuaikan 8080.

pengguna205246
sumber
1

Untuk menggunakan proxy HTTP, permintaan dikirim dari klien ke alamat IP server proxy daripada ke server tujuan. Proxy kemudian harus membaca header HTTP untuk mengekstrak permintaan-URI . Permintaan-URI menyertakan nama atau IP server tujuan, dan server proxy menggunakan informasi itu untuk meneruskan permintaan.

The spesifikasi HTTP memungkinkan garis permintaan untuk mengecualikan nama server dan port ketika proxy tidak digunakan (karena ini akan diperlukan jika permintaan itu dikirim langsung ke server itu). Tapi, sesuai spesifikasi ...

Formulir absoluteURI DIBUTUHKAN saat permintaan diajukan ke proxy.

Jadi ketika tidak menggunakan proxy, baris permintaan mungkin terlihat seperti:

GET /robots.txt HTTP/1.1

tetapi untuk menggunakan proxy, baris harus menyertakan nama server (dan port jika tidak 80):

GET http://httpbin.org:80/robots.txt HTTP/1.1

Sisi respons jika operasi bisa lebih sederhana karena server proxy dapat dengan mudah menyampaikan respons kata demi kata melalui soket permintaan yang ditetapkan sebelumnya.

bangsawan
sumber
Dari "HTTP The Definitive Guide", hal. 145: "HTTP / 1.1 sekarang mengharuskan server untuk menangani URI penuh untuk permintaan proxy dan server, tetapi dalam praktiknya, banyak server yang dikerahkan masih hanya menerima sebagian URI."
nobar
Itu bukan pendekatan standar, tetapi proxy juga mungkin dapat menggunakan Hostheader untuk menyelesaikan URI parsial jika URI absolut tidak disediakan di baris permintaan.
nobar
Pendekatan ini tidak dapat berfungsi jika koneksi terenkripsi ujung-ke-ujung (HTTPS). security.stackexchange.com/questions/101721/...
nobar
-7

Tidak ada yang namanya "paket tcp". TCP beroperasi dengan aliran data. Ada paket IP.

Anda tampaknya kurang memiliki pengetahuan dasar tentang jaringan, saya sarankan Anda untuk mendapatkan buku yang bagus tentang TCP / IP. Favorit semua orang tampaknya "TCP / IP diilustrasikan" oleh W. Richard Stevens.

Kembali ke pertanyaan Anda.

Proxy adalah perantara:

[Anda] - [proxy] - [server yang ingin Anda sambungkan]

Sekarang ada dua koneksi yang berbeda:

[Anda] - (koneksi Anda ke proxy) - [proxy] - (koneksi proxy ke server) - [server yang ingin Anda sambungkan]

Ketika Anda berpikir Anda terhubung ke server melalui proxy, Anda sebenarnya terhubung ke proxy dan katakan Anda ingin mencapai server tertentu. Kemudian proksi membuka koneksi kedua dari dirinya sendiri ke server itu dan bertindak sebagai perantara melewati data di kedua arah.

vtest
sumber
13
Paket TCP adalah paket IP dengan informasi header TCP di dalamnya. Ini adalah bahasa umum. Tolong jangan bersikap terlalu rendah hati; itu hanya mencerminkan buruk pada Anda, karena Anda juga salah pada saat yang sama.
Phil P