La ligne de requête qui achemine HTTP de Node via un proxy
Construisez une requête HTTP de proxy simple avec le client de base de Node en séparant le point de connexion, la cible absolue et l'en-tête Host.
Pour une requête HTTP ordinaire via un proxy mandataire, Node se connecte au proxy et envoie l'URL de destination dans la ligne de requête. Trois valeurs décrivent cette requête unique :
| Valeur | Exemple |
|---|---|
| Point de connexion TCP | proxy.example:8080 |
| Cible de la requête | http://example.com/news?q=proxy |
| En-tête Host | example.com |
Cet exemple Node 22 rend la séparation explicite :
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);
Le point de connexion est un espace réservé ; choisissez un candidat dans la liste de proxys HTTP pour un test HTTP public et vérifiez sa réponse. L'exemple vide la réponse après avoir imprimé son statut ; une application peut consommer le corps à la place. La requête reste une partie de la cible de la requête.
Pourquoi l'URL complète y a sa place
Un serveur d'origine reçoit normalement une cible telle que /news?q=proxy. Un proxy mandataire a aussi besoin de la destination, c'est pourquoi HTTP/1.1 définit la cible sous forme absolue :
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Selon les règles de HTTP/1.1, un proxy qui reçoit la forme absolue utilise l'autorité de l'URI lors du transfert et remplace un champ Host reçu incohérent. Envoyer un en-tête Host de destination cohérent garde néanmoins la requête sortante non ambiguë. Le nom d'hôte de connexion de Node est l'intermédiaire, définissez donc l'en-tête délibérément plutôt que de vous fier à cette adresse de connexion.
Si une authentification est requise, les identifiants du proxy appartiennent à son saut. L'option de requête auth de Node crée un en-tête Authorization pour la ressource ; ce n'est pas une option générale de connexion au proxy. Utilisez le schéma exigé par le proxy et un client proxy adapté lorsque l'échange est plus complexe.
HTTPS ajoute un tunnel
Cet exemple couvre le transfert HTTP simple. Une connexion HTTPS via un proxy HTTP typique demande d'abord CONNECT example.com:443, puis démarre TLS vers la destination à l'intérieur du tunnel accepté. Passer l'URL de l'exemple en HTTPS n'ajoute pas ces étapes.
Pour HTTPS ou une charge mixte, utilisez un agent ou répartiteur proxy maintenu avec la prise en charge du tunnel requise. Pour les versions compatibles de Node, une option est le fetch d'Undici avec un ProxyAgent. Conservez ce petit exemple de client de base pour les cas où l'échange HTTP simple est précisément ce que vous devez contrôler ou comprendre.