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.

Povezani članci