Непълни изображения през прокси: проверете завършването на записа в Netty
Когато изображенията пристигат непълни през прокси, проверете дали източникът затваря своя Netty канал, преди асинхронният запис на отговора да завърши.
Изображение работи по бърза директна връзка, но е непълно през по-бавно forward прокси. Възможна причина е източникът да затвори връзката, докато отговорът му все още се записва.
Netty I/O е асинхронен. Връщането от writeAndFlush не означава, че операцията е завършила. Затова тази последователност е опасна за отговор, който все още има байтове в опашка:
ctx.writeAndFlush(response);
ctx.close();
Когато HTTP обменът умишлено се затваря след последното си съобщение за отговор, прикачете затварянето към future на този запис:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
Фрагментът предполага, че отговорът вече е правилно изграден и рамкиран. За потоково тяло използвайте завършването на последното му съобщение, а не записа на заглавките. За постоянна HTTP връзка не добавяйте затваряне само защото отговорът е приключил.
Проверявайте неуспеха на future като част от нормалната обработка на грешки в приложението. Завършването включва неуспех и отказ, така че само по себе си то не е доказателство за доставка от браузъра.
Полезното сравнение е пълната дължина на отговора и резултатът от записа по всеки път. Проксито може да промени времето достатъчно, за да разкрие съществуваща грешка в жизнения цикъл; наличието му не доказва, че компресорът или кешът му са изхвърлили байтовете.