Подтвердить что ты не робот

Переписать заголовки ответов с помощью node -http-proxy

Я использую node-http-proxy и хочу следить за конкретным ответом заголовок и переписать его, если необходимо. У кого-нибудь есть предложения по сделать это?

Мой прокси-сервер находится перед несколькими разными серверами node, как а также java webapp. Приложение java устанавливает файл cookie, но cookie имеет путь, который является относительным контекстом webapp. мне нужно cookie, чтобы быть безопасным и иметь путь к root без изменения Java приложение.

Другими словами, возвращается следующий заголовок:

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

И я хотел бы переписать значение Path для:

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

Я не понимаю, как это сделать, используя node -http-proxy. Предложения? Есть ли промежуточное программное обеспечение, чтобы помочь с этим?

4b9b3361

Ответ 1

Вы можете добиться этого, перегружая функцию 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);

Ответ 2

Я не тестировал этот код, но он должен позволить вам отредактировать ваш заголовок перед отправкой запроса. Дайте мне знать, если это сработает.

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