node.js - node - Reescriba los encabezados de respuesta con nodo-http-proxy
nodejs http server (2)
Estoy usando node-http-proxy y deseo ver un encabezado de respuesta particular y reescribirlo si es necesario. ¿Alguien aquí tiene sugerencias para hacer esto?
Mi servidor proxy se encuentra frente a un par de servidores de nodos diferentes, así como una aplicación web 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 que la cookie sea segura y tenga una ruta de acceso a raíz sin modificar la aplicación Java.
En otras palabras, se devuelve el siguiente encabezado:
set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/app; HttpOnly
Y me gustaría reescribir el valor de la ruta a:
set-cookie: MYSPECIALCOOKIE=679b6291-d1cc-47be; Path=/; HttpOnly; Secure
No tengo claro cómo haría esto usando el nodo-http-proxy. Sugerencias? ¿Hay middleware para ayudar con esto?
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,
});
});
Puede lograr esto mediante la sobrecarga de la función writeHead del objeto de respuesta. Por ejemplo, este código establecerá el encabezado de respuesta ''foo'' en el valor ''barra''. 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);