Neúplné obrázky cez proxy: skontrolujte dokončenie zápisu v Netty
Keď obrázky cez proxy prichádzajú neúplné, preverte, či pôvod nezavrie svoj kanál Netty skôr, než sa asynchrónny zápis odpovede dokončí.
Obrázok funguje cez rýchle priame pripojenie, ale cez pomalšie forward proxy je neúplný. Jednou z možných príčin je, že pôvod zavrie spojenie, kým sa jeho odpoveď ešte zapisuje.
I/O v Netty je asynchrónne. Návrat z writeAndFlush neznamená, že operácia skončila. Toto poradie je preto nebezpečné pri odpovedi, ktorá má ešte bajty vo fronte:
ctx.writeAndFlush(response);
ctx.close();
Keď sa výmena HTTP zámerne zatvára po svojej poslednej správe odpovede, pripojte zatvorenie k future tohto zápisu:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
Úryvok predpokladá, že odpoveď už je správne zostavená a zarámovaná. Pri streamovanom tele použite dokončenie jeho poslednej správy, nie zápis hlavičiek. Pri trvalom HTTP spojení nepridávajte zatvorenie len preto, že odpoveď skončila.
Preskúmajte zlyhanie future v rámci bežného spracovania chýb aplikácie. Dokončenie zahŕňa zlyhanie aj zrušenie, takže samotné dokončenie nie je potvrdením doručenia z prehliadača.
Užitočné porovnanie je úplná dĺžka odpovede a výsledok zápisu na každej ceste. Proxy môže zmeniť časovanie natoľko, že odhalí existujúcu chybu životného cyklu; jeho prítomnosť však nedokazuje, že jeho kompresor alebo cache bajty zahodili.