Nepotpune slike kroz proxy: provjerite završetak pisanja u Nettyju
Kada slike kroz proxy stižu nepotpune, provjerite zatvara li izvor svoj Netty kanal prije nego što se asinhrono pisanje odgovora dovrši.
Slika radi preko brze direktne 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 asinhron. Povratak iz writeAndFlush ne znači da je ta operacija završena. Zato je ovaj redoslijed nesiguran za odgovor koji još ima bajtova u redu:
ctx.writeAndFlush(response);
ctx.close();
Kada se HTTP razmjena namjerno zatvara nakon svoje posljednje 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 koristite završ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čajenog rukovanja greškama u aplikaciji. Završetak uključuje neuspjeh i otkazivanje, pa sam završetak nije potvrda dostave od preglednika.
Korisno poređenje je ukupna dužina odgovora i ishod pisanja na svakoj stazi. 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.