2012-10-06 13 views
17

node-http-proxy kullanıyorum ve belirli bir yanıtı başlığına bakarak izlemek ve gerekirse yeniden yazmak. Buradaki herkesin için önerileri var mı?Node-http-proxy ile yanıt üstbilgilerini yeniden yazınız

Benim proxy sunucusu sıra java webapp olarak birkaç farklı düğüm sunucularının önünde oturur. Java uygulaması bir çerez ayarlıyor, ancak çerezi, webapp içeriğine göre bir yola sahip. Ben güvenli olması ve Java uygulamayı değiştirmeden köküne bir yol olması çerez gerekir.

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

Ve Yol değerini yeniden yazmak istiyorum: Bir başka deyişle

aşağıdaki başlığı döndürülür bunu nasıl açık değilim

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

node-http-proxy kullanarak. Öneriler? Bu konuda yardımcı olabilecek bir katware var mı?

+0

Bu soruya başka birinin gelmesi durumunda, gzip connect middleware, sorunumu çözebilecek bir desen kullanır. Gzip uygulamasına dayanan kendi ara katman yazılımımı hackledim, ama tam olarak çalışmanın zamanını almadım. Ancak, biraz daha tweaking ile çalışacak gibi görünüyor. https://github.com/nodejitsu/node-http-proxy/blob/master/examples/middleware/gzip-middleware.js göz atın – Tauren

cevap

24

Sen tepki nesnenin writeHead fonksiyonunu yüklemesi yaparak elde edebilirsiniz. Örneğin, bu kod 'foo' yanıt başlığını 'bar' değerine ayarlayacaktır. Başlık değerlerini değiştirmek için kendi mantığınızı nereye ekleyebileceğinizi belirledim.

JavaScript benim ana dili değil, bu yüzden writeHead yöntemini aşan bir daha deyimsel yol olabilir.

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

Teşekkürler! Bu cevap esasen yaptığım şeyle aynı. Sadece buraya geri gelmeyi ve cevabı eklemeyi unuttum. Bu kodu inceleyerek bunu nasıl bir örnek bulundu: https://github.com/nateps/connect-gzip/blob/master/lib/gzip.js – Tauren

-1

Bu kodu test etmedi, ancak bu isteğini göndermeden önce Üstbilginizi düzenlemek için izin vermelidir. Eğer işe yararsa beni bilgilendir.

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

Kodunuz istek üzerine bir başlık ayarlıyor. * Yanıtı * üzerinde bir başlık değiştirmem gerekiyor. – Tauren

İlgili konular