18

私はnode-http-proxyを使用しており、特定の応答ヘッダーを監視し、必要に応じて書き換えたいと考えています。ここで誰でもこれを行うための提案がありますか?

私のプロキシ サーバーは、いくつかの異なるノード サーバーと Java Web アプリケーションの前に配置されています。Java アプリは Cookie を設定していますが、Cookie には Web アプリのコンテキストに関連するパスがあります。Java アプリケーションを変更せずに、cookie をセキュアにし、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 に答える
-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 に答える