En bild fungerar över en snabb direkt anslutning, men är ofullständig via en långsammare forward-proxy. En möjlig orsak är att ursprunget stänger anslutningen medan svaret fortfarande skrivs.

Netty I/O är asynkront. Att återvända från writeAndFlush betyder inte att operationen är slutförd. Denna ordning är därför osäker för ett svar som fortfarande har byte i kö:

ctx.writeAndFlush(response);
ctx.close();

När HTTP-utbytet avsiktligt stängs efter sitt sista svarsmeddelande, koppla stängningen till framtiden för den skrivningen:

ctx.writeAndFlush(finalResponseMessage)
    .addListener(ChannelFutureListener.CLOSE);

Utdraget förutsätter att svaret redan är korrekt uppbyggt och inramat. För en strömmad body använd slutförandet av dess sista meddelande, inte skrivningen av dess huvuden. För en beständig HTTP-anslutning, lägg inte till en stängning bara för att ett svar är klart.

Undersök futurens fel som en del av applikationens normala felhantering. Slutförande omfattar fel och avbrott, så slutförande ensamt är inte en leveranskvittens från webbläsaren.

Den användbara jämförelsen är den fullständiga svarslängden och skrivresultatet på varje väg. En proxy kan ändra tidsinställningen tillräckligt för att avslöja ett befintligt livscykelfel; dess närvaro bevisar inte att dess kompressor eller cache kastade byten.

Relaterade artiklar