Neúplné obrázky přes proxy: zkontrolujte dokončení zápisu v Netty
Když obrázky přes proxy dorazí neúplné, prověřte, zda původ nezavírá svůj kanál Netty dřív, než se asynchronní zápis odpovědi dokončí.
Obrázek funguje přes rychlé přímé připojení, ale přes pomalejší forward proxy je neúplný. Jednou z možných příčin je, že původ zavře spojení, zatímco se jeho odpověď ještě zapisuje.
I/O v Netty je asynchronní. Návrat z writeAndFlush neznamená, že operace skončila. Toto pořadí je proto nebezpečné u odpovědi, která má ještě bajty ve frontě:
ctx.writeAndFlush(response);
ctx.close();
Když se HTTP výměna záměrně zavírá po své poslední zprávě odpovědi, připojte zavření k future tohoto zápisu:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
Úryvek předpokládá, že odpověď už je správně sestavená a zarámovaná. U streamovaného těla použijte dokončení jeho poslední zprávy, ne zápis hlaviček. U trvalého HTTP spojení nepřidávejte zavření jen proto, že odpověď skončila.
Selhání future prozkoumejte v rámci běžného zpracování chyb aplikace. Dokončení zahrnuje selhání i zrušení, takže samotné dokončení není potvrzením doručení z prohlížeče.
Užitečné srovnání je úplná délka odpovědi a výsledek zápisu na každé cestě. Proxy může změnit časování natolik, že odhalí existující chybu životního cyklu; její přítomnost však nedokazuje, že jeho kompresor nebo cache bajty zahodily.