18

我正在使用node-http-proxy并希望监视特定的响应标头并在必要时对其进行重写。这里有人有建议吗?

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

换句话说,返回以下标头:

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

我想将 Path 值重写为:

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

我不清楚如何使用 node-http-proxy 来做到这一点。建议?是否有中间件可以帮助解决这个问题?

4

3 回答 3

26

您可以通过重载响应对象的 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);
于 2012-10-23T14:13:33.930 回答
0

只需听proxyRes事件并输入您的逻辑即可。

proxy.on('proxyRes', (proxyRes, req, res) => {
    // modifying headers goes here
});

https://www.npmjs.com/package/http-proxy#listening-for-proxy-events

于 2021-03-12T05:39:55.643 回答
-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,
  });
});
于 2012-10-07T11:23:20.527 回答