用node-http-proxy重写响应头

我正在使用node-http-proxy,并且希望监视特定的响应头并在必要时重写它。 这里有人有这样的build议吗?

我的代理服务器位于几个不同的节点服务器以及一个java webapp之前。 java应用程序正在设置一个cookie,但是cookie有一个相对于webapp的上下文的path。 我需要cookie是安全的,并且有一个通向root的path,而不需要修改Java应用程序。

换句话说,下面的头文件被返回:

set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/app; HttpOnly 

我想重写Path值为:

 set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/; HttpOnly; Secure 

我不清楚我将如何使用node-http-proxy来做到这一点。 build议? 有中间件来帮助吗?

您可以通过重载响应对象的writeHead函数来实现此目的。 例如,这段代码会将“foo”响应头设置为“bar”的值。 我已经指出你可以添加你自己的逻辑来改变标题值。

JavaScript不是我的主要语言,所以可能会有一个更习惯的方式来重载writeHead方法。

 httpProxy = require('http-proxy'); httpProxy.createServer(function (req, res, proxy) { res.oldWriteHead = res.writeHead; res.writeHead = function(statusCode, headers) { /* add logic to change headers here */ var contentType = res.getHeader('content-type'); res.setHeader('content-type', 'text/plain'); // old way: might not work now // as headers param is not always provided // https://github.com/nodejitsu/node-http-proxy/pull/260/files // headers['foo'] = 'bar'; res.oldWriteHead(statusCode, headers); } proxy.proxyRequest(req, res, { host: 'localhost', port: 3000 }); }).listen(8000); 

我没有testing这个代码,但它应该允许你在发送请求之前编辑你的头文件。 让我知道如果它的作品。

 var httpProxy = require('http-proxy'); var server = httpProxy.createServer(function (req, res, proxy) { var buffer = httpProxy.buffer(req); req.headers['x-host'] = process.env.PROXY_URI; proxy.proxyRequest(req, res, { host: '127.0.0.1', port: 9000, }); });