Няпоўныя выявы праз проксі: праверце завяршэнне запісу Netty
Калі выявы прыходзяць праз проксі няпоўнымі, праверце, ці не закрывае крыніца канал Netty да завяршэння асінхроннага запісу адказу.
Выява працуе праз хуткае прамое злучэнне, але праз павольнейшы прамы проксі прыходзіць няпоўнай. Адна з магчымых прычын — крыніца закрывае злучэнне, пакуль яе адказ яшчэ запісваецца.
Увод/вывад Netty асінхронны. Вяртанне з writeAndFlush не азначае, што гэтая аперацыя завершана. Таму такі парадак небяспечны для адказу, у якога яшчэ ёсць байты ў чарзе:
ctx.writeAndFlush(response);
ctx.close();
Калі HTTP-абмен наўмысна закрываецца пасля свайго апошняга паведамлення адказу, далучыце закрыццё да future гэтага запісу:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
Фрагмент мяркуе, што адказ ужо правільна пабудаваны і сфарміраваны. Для патоку цела выкарыстоўвайце завяршэнне яго апошняга паведамлення, а не запіс загалоўкаў. Для пастаяннага HTTP-злучэння не дадавайце закрыццё толькі таму, што адказ скончыўся.
Правярайце збой future у рамках звычайнай апрацоўкі памылак праграмы. Завяршэнне ўключае збой і скасаванне, таму завяршэнне само па сабе не з'яўляецца пацвярджэннем дастаўкі ад браўзера.
Карыснае параўнанне — поўная даўжыня адказу і вынік запісу на кожным шляху. Проксі можа змяніць час настолькі, каб выявіць існуючую памылку жыццёвага цыклу; яго наяўнасць не даказвае, што яго кампрэсар або кэш адкінуў байты.