Изображение работи по бърза директна връзка, но е непълно през по-бавно forward прокси. Възможна причина е източникът да затвори връзката, докато отговорът му все още се записва.

Netty I/O е асинхронен. Връщането от writeAndFlush не означава, че операцията е завършила. Затова тази последователност е опасна за отговор, който все още има байтове в опашка:

ctx.writeAndFlush(response);
ctx.close();

Когато HTTP обменът умишлено се затваря след последното си съобщение за отговор, прикачете затварянето към future на този запис:

ctx.writeAndFlush(finalResponseMessage)
    .addListener(ChannelFutureListener.CLOSE);

Фрагментът предполага, че отговорът вече е правилно изграден и рамкиран. За потоково тяло използвайте завършването на последното му съобщение, а не записа на заглавките. За постоянна HTTP връзка не добавяйте затваряне само защото отговорът е приключил.

Проверявайте неуспеха на future като част от нормалната обработка на грешки в приложението. Завършването включва неуспех и отказ, така че само по себе си то не е доказателство за доставка от браузъра.

Полезното сравнение е пълната дължина на отговора и резултатът от записа по всеки път. Проксито може да промени времето достатъчно, за да разкрие съществуваща грешка в жизнения цикъл; наличието му не доказва, че компресорът или кешът му са изхвърлили байтовете.

Подобни статии