Proxy node.js simple en redirigeant le serveur http vers une requête http
Essayer d'en apprendre plus sur node.js en faisant un simple serveur proxy http. Le scénario d'utilisation est simple: l'utilisateur -> proxy -> serveur -> proxy -> user
Le code suivant fonctionne jusqu'à la dernière étape. Ne pouvais pas trouver moyen de tuyau du connecteur de sortie à l'utilisateur.
#!/usr/bin/env node
var
url = require('url'),
http = require('http'),
acceptor = http.createServer().listen(3128);
acceptor.on('request', function(request, response) {
console.log('request ' + request.url);
request.pause();
var options = url.parse(request.url);
options.headers = request.headers;
options.method = request.method;
options.agent = false;
var connector = http.request(options);
request.pipe(connector);
request.resume();
// connector.pipe(response); //doesn't work
// connector.pipe(request); //doesn't work either
});
À l'aide de tcpflow je vois la demande entrante à partir du navigateur, puis sortant de proxy demande, la réponse du serveur de retour vers le proxy. De toute façon je ne parvenais pas à le retransmettre la réponse au navigateur.
Quelle est la méthode appropriée pour mettre en œuvre cette logique avec des tuyaux?
source d'informationauteur Nikolai Gorchilov
Vous devez vous connecter pour publier un commentaire.
vous n'avez pas de "pause", juste "pipe" est ok
requête http ne finira pas jusqu'à ce que vous dites c'est "fin";
OK. L'a obtenu.
MISE À JOUR: NB! Comme signalé dans les commentaires, cet exemple ne fonctionne plus. Probablement à cause du Streams2 API changement (nœud de 0,9+)
De la tuyauterie de retour le client doit se passer à l'intérieur du connecteur de rappel comme suit:
J'ai utilisé les exemples de ce post pour proxy http/s demandes. Face au problème que les cookies ont été perdus quelque part.
Afin de corriger cela, vous devez gérer les en-têtes de la procuration de réponse.
Ci-dessous l'exemple de travail: