web-dev-qa-db-ja.com

node-http-proxyで応答ヘッダーを書き換えます

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

私のプロキシサーバーは、いくつかの異なるノードサーバーとJava webappの前にあります。JavaアプリはCookieを設定していますが、CookieにはWebアプリケーションのコンテキストに相対的なパス。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を使用してこれを行う方法がわかりません。提案?これを支援するミドルウェアはありますか?

17
Tauren

これは、応答オブジェクトの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);
25
paul