Nepotpune slike kroz proxy: provjerite završetak pisanja u Nettyju
Kada slike kroz proxy stignu nepotpune, provjerite zatvara li izvor svoj Netty kanal prije nego što se asinkrono pisanje odgovora dovrši.
Slika radi preko brze izravne veze, ali je nepotpuna kroz sporiji forward proxy. Jedan mogući uzrok je da izvor zatvori vezu dok se njegov odgovor još piše.
Netty I/O je asinkron. Povratak iz writeAndFlush ne znači da je ta operacija dovršena. Zato je ovaj slijed nesiguran za odgovor koji još ima bajtova u redu:
ctx.writeAndFlush(response);
ctx.close();
Kada se HTTP razmena namerno zatvara nakon svoje poslednje poruke odgovora, prikačite zatvaranje na future tog pisanja:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
Isječak pretpostavlja da je odgovor već ispravno izgrađen i uokviren. Za strujano tijelo upotrijebite dovršetak njegove posljednje poruke, a ne pisanje zaglavlja. Za trajnu HTTP vezu ne dodajte zatvaranje samo zato što je odgovor završio.
Provjerite neuspjeh future-a kao dio uobičajene obrade grešaka u aplikaciji. Dovršetak uključuje neuspjeh i otkazivanje, pa sam dovršetak nije potvrda dostave od preglednika.
Korisno poređenje je ukupna dužina odgovora i ishod pisanja na svakom putu. Proxy može promijeniti vrijeme dovoljno da otkrije postojeću grešku životnog ciklusa; njegovo prisustvo ne dokazuje da su njegov kompresor ili keš odbacili bajtove.