2012-10-06 21 views
17

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

私のプロキシサーバーは、 と同様にいくつかの異なるノードサーバーの前にJava Webアプリケーションとして座っています。 JavaアプリケーションはCookieを設定していますが、 のCookieにはWebAppのコンテキストに相対的なパスがあります。 クッキーを保護し、Java アプリケーションを変更せずにルートへのパスが必要です。言い換えれば

は、以下のヘッダが返されます。

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

そして私はにパスの値を書き換えるしたい:私はこれを行うだろうか明確ではないよ

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

node-http-proxyを使用します。提案? これに役立つミドルウェアはありますか?

+0

他の人がこの質問に遭遇した場合、gzip接続ミドルウェアはその問題を解決できるパターンを使用します。私はgzipの実装に基づいて自分のミドルウェアをハックしましたが、完全に機能するように時間を割いていません。しかし、ちょっと微調整してもうまくいくように見えます。 https://github.com/nodejitsu/node-http-proxy/blob/master/examples/middleware/gzip-middleware.jsを確認してください – Tauren

答えて

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

ありがとう!この答えは、私がやったことと本質的に同じです。ここに戻り、答えを追加するのを忘れてしまった。私は、このコードを調べることでそれを行う方法の例を見つけました:https://github.com/nateps/connect-gzip/blob/master/lib/gzip.js – Tauren

-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, 
    }); 
}); 
+1

あなたのコードはリクエストにヘッダを設定しています。私は*応答*のヘッダを変更する必要があります。 – Tauren

関連する問題