HTTP Proxy: отклонить полуобработанный запрос
У меня есть HTTP Proxy, основанный на Node.js, который преобразовывает тело ответа на лету в потоковом режиме. Например, мой прокси работает как nginx, который сжимает (используя libz для gzipping) тело ответа.
Но у меня есть открытый вопрос: что если во время обмена данными произойдет ошибка в восходящем соединении. Как уведомить клиента об ошибке en, когда ответ уже отправлен и передающий орган находится в процессе. Сложность определения ошибок на стороне клиента на основе того, что Content-Length
отсутствует в ответе из-за несоответствия источника и преобразованных данных.
Чтобы уточнить некоторые детали, я добавил простой фрагмент кода:
var express = require("express");
var http = require("http");
var url = require('url');
var webApp = express();
var httpServer = webApp.listen(8080, function () {
console.log("server started on ", 8080, " port");
});
webApp.get("*", function(req, res) {
var targetRequest = http.get(req.originalUrl, function (upstreamResponse) {
if (upstreamResponse.statusCode != 200) {
res.status(500).send("Internal Server Error");
return;
}
upstreamResponse.on("data", function (chunk) {
/// transform chunk and send it to the client
res.write(chunk);
});
upstreamResponse.on("end", function () {
res.end();
});
/// upstream connection error occured
upstreamResponse.on("error", function (error) {
/// How to properly notify client
/// about error ????
/// ????
});
});
});
1 ответ
На самом деле, единственный способ уведомить клиентов о некоторых проблемах - это просто отключить нисходящие соединения.