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 ответ

Решение

На самом деле, единственный способ уведомить клиентов о некоторых проблемах - это просто отключить нисходящие соединения.

Другие вопросы по тегам