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.

Povezani članci