2012-10-06 30 views
17

Estoy usando node-http-proxy y quiero ver un encabezado de respuesta particular y reescribirlo si es necesario. ¿Alguien aquí tiene sugerencias sobre hacer esto?Reescribir los encabezados de respuesta con node-http-proxy

Mi servidor proxy se encuentra frente a un par de servidores de nodo diferentes como , así como una aplicación web de Java. La aplicación Java está configurando una cookie, pero la cookie tiene una ruta que es relativa al contexto de la aplicación web. Necesito la cookie para estar seguro y tengo una ruta para rootear sin modificar la aplicación Java .

En otras palabras, la siguiente cabecera se devuelve:

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

y me gustaría volver a escribir el valor Ruta de acceso a:

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

No me queda claro cómo iba a hacer esto utilizando node-http-proxy. Sugerencias? ¿Hay middleware para ayudar con esto?

+0

En caso de que alguien más se encuentre con esta pregunta, el middleware gzip connect usa un patrón que puede resolver mi problema. He pirateado mi propio middleware baased en la implementación de gzip, pero no me he tomado el tiempo para hacerlo funcionar completamente. Sin embargo, parece que funcionará con un poco más de ajuste. Consulte https://github.com/nodejitsu/node-http-proxy/blob/master/examples/middleware/gzip-middleware.js – Tauren

Respuesta

24

Puede lograr esto sobrecargando la función writeHead del objeto de respuesta. Por ejemplo, este código establecerá el encabezado de respuesta 'foo' al valor 'bar'. He indicado dónde puede agregar su propia lógica para cambiar los valores del encabezado.

JavaScript no es mi idioma principal, por lo que puede haber una forma más idiomática de sobrecargar el método 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

Gracias! Esta respuesta es esencialmente la misma que terminé haciendo. Simplemente olvidé volver y agregar la respuesta. Encontré un ejemplo de cómo hacerlo al examinar este código: https://github.com/nateps/connect-gzip/blob/master/lib/gzip.js – Tauren

-1

No probé este código, pero debería permitirle editar su encabezado antes de enviar la solicitud. Déjame saber si funciona.

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

Su código está configurando un encabezado en la solicitud. Necesito modificar un encabezado en la * respuesta *. – Tauren

Cuestiones relacionadas