Узел HTTP-прокси: попытка использования другой конечной точки в зависимости от ответа

Короче говоря, мы используем https://github.com/chimurai/http-proxy-middleware, и если исходная проксируемая конечная точка возвращает 404 или 500, мы хотели бы вместо этого направить запрос к другой конечной точке.

i.e.

-> http://www.example.com (404)

-> http://www.backup.com (200)

Таким образом, клиент получает ответ от www.backup.com.


person Sherwyn Goh    schedule 15.09.2017    source источник


Ответы (1)


После некоторого расследования я обнаружил, что невозможно передать HTTP-запрос на другую конечную точку, используя http-proxy-middleware.

http-proxy-middleware работает на https://github.com/nodejitsu/node-http-proxy, и его невозможно реализовать требование в node-http-proxy. Соответствующий код приведен ниже:

// node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js
proxyReq.on('response', function(proxyRes) {
  if(server) { server.emit('proxyRes', proxyRes, req, res); }
  ...
  proxyRes.pipe(res);
});

После получения ответа генерируется событие proxyRes, и этот ответ немедленно передается браузеру (объект res).

Хотя мы можем прослушивать proxyRes событие и знать, что статус ответа - 404 или 500, мы ничего не можем сделать, чтобы изменить сам ответ.

Чтобы реализовать это требование, вам нужно написать логику прокси самостоятельно или использовать какой-либо другой модуль прокси, который поддерживает перехват резонанса.

person shaochuancs    schedule 15.09.2017