From ffe74ed299f81206b898147dbcc985519b2921f8 Mon Sep 17 00:00:00 2001 From: Yosef Dinerstein Date: Sun, 29 Jul 2012 16:22:57 +0300 Subject: [PATCH] - support unix donain sockets and windows named pipes (socketPath) on node 0.8.x. On node 0.6.x the support was opaque via port, but on the new node, socketPath should be set explicitely. - avoid adding multiple headers with the same name - fix bug in setting connection --- lib/node-http-proxy/http-proxy.js | 22 +++++++++++++--------- lib/node-http-proxy/routing-proxy.js | 11 ++++++----- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/node-http-proxy/http-proxy.js b/lib/node-http-proxy/http-proxy.js index ffc2c9d4a..9e77103c8 100644 --- a/lib/node-http-proxy/http-proxy.js +++ b/lib/node-http-proxy/http-proxy.js @@ -212,13 +212,14 @@ HttpProxy.prototype.proxyRequest = function (req, res, buffer) { // // Setup outgoing proxy with relevant properties. // - outgoing.host = this.target.host; - outgoing.hostname = this.target.hostname; - outgoing.port = this.target.port; - outgoing.agent = this.target.agent; - outgoing.method = req.method; - outgoing.path = req.url; - outgoing.headers = req.headers; + outgoing.host = this.target.host; + outgoing.hostname = this.target.hostname; + outgoing.port = this.target.port; + outgoing.socketPath = this.target.socketPath; + outgoing.agent = this.target.agent; + outgoing.method = req.method; + outgoing.path = req.url; + outgoing.headers = req.headers; // // If the changeOrigin option is specified, change the @@ -237,7 +238,7 @@ HttpProxy.prototype.proxyRequest = function (req, res, buffer) { // // Process the `reverseProxy` `response` when it's received. // - if (response.headers.connection) { + if (!response.headers.connection) { if (req.headers.connection) { response.headers.connection = req.headers.connection } else { response.headers.connection = 'close' } } @@ -281,7 +282,10 @@ HttpProxy.prototype.proxyRequest = function (req, res, buffer) { }); // Set the headers of the client response - res.writeHead(response.statusCode, response.headers); + Object.keys(response.headers).forEach(function(key){ + res.setHeader(key, response.headers[key]); + }); + res.writeHead(response.statusCode); // If `response.statusCode === 304`: No 'data' event and no 'end' if (response.statusCode === 304) { diff --git a/lib/node-http-proxy/routing-proxy.js b/lib/node-http-proxy/routing-proxy.js index d00b722a7..58ed2446e 100644 --- a/lib/node-http-proxy/routing-proxy.js +++ b/lib/node-http-proxy/routing-proxy.js @@ -85,11 +85,12 @@ RoutingProxy.prototype.add = function (options) { // // TODO: Consume properties in `options` related to the `ProxyTable`. // - options.target = options.target || {}; - options.target.host = options.target.host || options.host; - options.target.port = options.target.port || options.port; - options.target.https = this.target && this.target.https || - options.target && options.target.https; + options.target = options.target || {}; + options.target.host = options.target.host || options.host; + options.target.port = options.target.port || options.port; + options.target.socketPath = options.target.socketPath || options.socketPath; + options.target.https = this.target && this.target.https || + options.target && options.target.https; // // Setup options to pass-thru to the new `HttpProxy` instance