Nepotpune slike kroz proxy: provjerite dovrš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 razmjena namjerno zatvara nakon svoje posljednje poruke odgovora, pričvrstite 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 pogrešaka u aplikaciji. Dovršetak uključuje neuspjeh i otkazivanje, pa sam dovršetak nije potvrda dostave od preglednika.
Korisna usporedba je ukupna duljina odgovora i ishod pisanja na svakom putu. Proxy može promijeniti vrijeme dovoljno da otkrije postojeću pogrešku životnog ciklusa; njegova prisutnost ne dokazuje da su njegov kompresor ili predmemorija odbacili bajtove.