Untuk permintaan HTTP biasa melalui proxy penerus, Node terhubung ke proxy dan mengirim URL tujuan di baris permintaan. Tiga nilai menjelaskan satu permintaan itu:

NilaiContoh
Endpoint koneksi TCPproxy.example:8080
Target permintaanhttp://example.com/news?q=proxy
Header Hostexample.com

Contoh Node 22 ini membuat pemisahan itu eksplisit:

const http = require('node:http');
const destination = new URL('http://example.com/news?q=proxy');

const request = http.get({
  hostname: 'proxy.example',
  port: 8080,
  path: destination.href,
  headers: { Host: destination.host },
  signal: AbortSignal.timeout(15000),
}, (response) => {
  console.log(response.statusCode);
  response.on('error', console.error);
  response.resume();
});
request.on('error', console.error);

Endpoint adalah placeholder; pilih kandidat dari daftar proxy HTTP untuk uji HTTP publik dan periksa responsnya. Contoh menguras respons setelah mencetak statusnya; aplikasi dapat mengonsumsi body sebagai gantinya. Kueri tetap menjadi bagian dari target permintaan.

Mengapa URL lengkap ada di sana

Server asal biasanya menerima target seperti /news?q=proxy. Proxy penerus juga memerlukan tujuan, sehingga HTTP/1.1 mendefinisikan target dalam bentuk absolut:

GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com

Menurut aturan HTTP/1.1, proxy yang menerima bentuk absolut menggunakan otoritas URI saat meneruskan dan mengganti field Host yang diterima tidak konsisten. Mengirim header Host tujuan yang konsisten tetap membuat permintaan keluar tidak ambigu. Nama host koneksi Node adalah perantara, jadi setel header dengan sengaja alih-alih mengandalkan alamat koneksi itu.

Jika autentikasi diperlukan, kredensial proxy menjadi milik hop-nya. Opsi permintaan auth Node membuat header Authorization untuk sumber daya; itu bukan opsi login proxy umum. Gunakan skema yang diminta proxy dan klien proxy yang sesuai saat pertukaran lebih rumit.

HTTPS menambahkan terowongan

Contoh ini mencakup penerusan HTTP biasa. Koneksi HTTPS melalui proxy HTTP yang tipikal pertama meminta CONNECT example.com:443, lalu memulai TLS ke tujuan di dalam terowongan yang diterima. Mengubah URL contoh menjadi HTTPS tidak menambahkan tahapan itu.

Untuk HTTPS atau beban kerja campuran, gunakan agen atau pengirim proxy yang terpelihara dengan dukungan terowongan yang diperlukan. Untuk versi Node yang kompatibel, salah satu opsi adalah fetch Undici dengan ProxyAgent. Pertahankan contoh klien inti kecil ini untuk kasus ketika pertukaran HTTP biasa itu sendiri adalah yang perlu Anda kendalikan atau pahami.

Artikel terkait