Baris permintaan yang menghalakan HTTP Node melalui proksi
Bina permintaan HTTP proksi biasa dengan klien teras Node dengan memisahkan titik akhir sambungan, sasaran mutlak dan pengepala Host.
Dalam permintaan HTTP biasa melalui proksi hadapan, Node bersambung ke proksi dan menghantar URL destinasi dalam baris permintaan. Tiga nilai menerangkan satu permintaan itu:
| Nilai | Contoh |
|---|---|
| Titik akhir sambungan TCP | proxy.example:8080 |
| Sasaran permintaan | http://example.com/news?q=proxy |
| Pengepala Host | example.com |
Contoh Node 22 ini menjadikan pemisahan itu jelas:
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);
Titik akhir ialah pemegang tempat; pilih calon daripada senarai proksi HTTP untuk ujian HTTP awam dan semak responsnya. Contoh menguras respons selepas mencetak statusnya; aplikasi boleh menggunakan badan sebaliknya. Pertanyaan kekal sebahagian daripada sasaran permintaan.
Mengapa URL penuh terletak di situ
Pelayan asal biasanya menerima sasaran seperti /news?q=proxy. Proksi hadapan juga memerlukan destinasi, jadi HTTP/1.1 mentakrifkan sasaran dalam bentuk mutlak:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Di bawah peraturan HTTP/1.1, proksi yang menerima bentuk mutlak menggunakan kuasa URI semasa memajukan dan menggantikan medan Host diterima yang tidak konsisten. Menghantar pengepala Host destinasi yang konsisten tetap menjadikan permintaan keluar tidak kabur. Nama hos sambungan Node ialah perantara, jadi tetapkan pengepala dengan sengaja dan bukan bergantung pada alamat sambungan itu.
Jika pengesahan diperlukan, kelayakan proksi adalah milik hopnya sendiri. Pilihan permintaan auth Node mencipta pengepala Authorization untuk sumber; ia bukan pilihan log masuk proksi umum. Gunakan skema yang dikehendaki proksi dan klien proksi yang sesuai apabila pertukaran lebih rumit.
HTTPS menambah terowong
Contoh ini meliputi pemajuan HTTP biasa. Sambungan HTTPS melalui proksi HTTP lazimnya meminta CONNECT example.com:443 dahulu, kemudian memulakan TLS ke destinasi di dalam terowong yang diterima. Menukar URL contoh kepada HTTPS tidak menambah peringkat itu.
Untuk HTTPS atau beban kerja bercampur, gunakan ejen atau penghantar proksi yang diselenggara dengan sokongan terowong yang diperlukan. Untuk versi Node yang serasi, satu pilihan ialah fetch Undici dengan ProxyAgent. Kekalkan contoh klien teras kecil ini untuk kes apabila pertukaran HTTP biasa itu sendiri ialah apa yang perlu anda kawal atau fahami.