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.

Súvisiace články