我正在使用node-http-proxy并希望关注特定的回复 标题并在必要时重写它。这里的任何人都有建议 这样做?
我的代理服务器位于几个不同的节点服务器前面 以及java webapp。 java应用程序正在设置cookie,但是 cookie有一个相对于webapp上下文的路径。我需要 cookie是安全的,并且具有root的路径而无需修改Java 应用
换句话说,返回以下标题:
set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/app; HttpOnly
我想将Path值重写为:
set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/; HttpOnly; Secure
我不清楚如何使用node-http-proxy执行此操作。建议? 是否有中间件来帮助解决这个问题?
答案 0 :(得分:24)
您可以通过重载响应对象的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);
答案 1 :(得分:0)
只需聆听 proxyRes
事件并放置您的逻辑。
proxy.on('proxyRes', (proxyRes, req, res) => {
// modifying headers goes here
});
见https://www.npmjs.com/package/http-proxy#listening-for-proxy-events
答案 2 :(得分:-1)
我没有测试此代码,但它应该允许您在发送请求之前编辑标头。如果有效,请告诉我。
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,
});
});