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.

Povezani članci