使用node-http-proxy重写响应头

Tau*_*ren 17 node.js node-http-proxy

我正在使用node-http-proxy,想要查看特定的响应头并在必要时重写它.这里的任何人都有建议吗?

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

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

set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/app; HttpOnly
Run Code Online (Sandbox Code Playgroud)

我想将Path值重写为:

set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/; HttpOnly; Secure
Run Code Online (Sandbox Code Playgroud)

我不清楚如何使用node-http-proxy执行此操作.建议?有中间件来帮助解决这个问题吗?

pau*_*aul 25

您可以通过重载响应对象的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);
Run Code Online (Sandbox Code Playgroud)