Node HTTP'yi bir proxy üzerinden yönlendiren istek satırı
Node'un çekirdek istemcisiyle bağlantı uç noktasını, mutlak hedefi ve Host başlığını ayırarak düz bir HTTP proxy isteği oluşturun.
Yönlendirici bir proxy üzerinden yapılan sıradan bir HTTP isteğinde Node proxy'ye bağlanır ve hedef URL'yi istek satırında gönderir. Üç değer bu tek isteği tanımlar:
| Değer | Örnek |
|---|---|
| TCP bağlantı uç noktası | proxy.example:8080 |
| İstek hedefi | http://example.com/news?q=proxy |
| Host başlığı | example.com |
Bu Node 22 örneği ayrımı açık hale getirir:
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);
Uç nokta bir yer tutucudur; genel bir HTTP testi için HTTP proxy listesinden bir aday seçin ve yanıtını kontrol edin. Örnek, durumu yazdırdıktan sonra yanıtı boşaltır; bir uygulama bunun yerine gövdeyi tüketebilir. Sorgu, istek hedefinin parçası olarak kalır.
Tam URL neden oraya aittir
Bir kaynak sunucu normalde /news?q=proxy gibi bir hedef alır. Yönlendirici proxy'nin de hedefe ihtiyacı vardır, bu yüzden HTTP/1.1 hedefi mutlak biçimde tanımlar:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
HTTP/1.1 kurallarına göre, mutlak biçimi alan bir proxy iletirken URI'nin yetkisini kullanır ve tutarsız alınan Host alanını değiştirir. Tutarlı bir hedef Host başlığı göndermek yine de giden isteği belirsizlikten kurtarır. Node'un bağlantı ana bilgisayar adı aracıdır, bu nedenle başlığı o bağlantı adresine güvenmek yerine bilinçli olarak ayarlayın.
Kimlik doğrulama gerekiyorsa, proxy'nin kimlik bilgileri kendi atlamasına aittir. Node'un auth istek seçeneği kaynak için bir Authorization başlığı oluşturur; genel bir proxy oturum açma seçeneği değildir. Değişim daha karmaşık olduğunda proxy'nin gerektirdiği şemayı ve uygun bir proxy istemcisini kullanın.
HTTPS bir tünel ekler
Bu örnek düz HTTP iletimini kapsar. Tipik bir HTTP proxy üzerinden HTTPS bağlantısı önce CONNECT example.com:443 ister, ardından kabul edilen tünelin içinde hedefe TLS başlatır. Örneğin URL'sini HTTPS'e değiştirmek bu aşamaları eklemez.
HTTPS veya karma bir iş yükü için gerekli tünel desteğine sahip bakımlı bir proxy aracısı veya dağıtıcısı kullanın. Uyumlu Node sürümleri için bir seçenek ProxyAgent ile Undici fetch'tir. Düz HTTP alışverişinin kendisi kontrol etmeniz veya anlamanız gereken şey olduğunda bu küçük çekirdek istemci örneğini koruyun.