Ufuldstændige billeder gennem en proxy: kontrollér Netty's skrivefuldførelse
Når billeder kommer ufuldstændige gennem en proxy, undersøg om oprindelsen lukker sin Netty-kanal, før den asynkrone skrivning af svaret er fuldført.
Et billede virker over en hurtig direkte forbindelse, men er ufuldstændigt gennem en langsommere forward-proxy. En mulig årsag er, at oprindelsen lukker forbindelsen, mens svaret stadig skrives.
Netty I/O er asynkron. At vende tilbage fra writeAndFlush betyder ikke, at operationen er fuldført. Denne rækkefølge er derfor usikker for et svar, der stadig har bytes i kø:
ctx.writeAndFlush(response);
ctx.close();
Når HTTP-udvekslingen bevidst lukkes efter sin sidste svarbesked, skal lukningen knyttes til denne skrivnings future:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
Uddraget forudsætter, at svaret allerede er korrekt opbygget og indrammet. For en streamet body skal du bruge fuldførelsen af dens sidste besked i stedet for skrivningen af dens headers. For en vedvarende HTTP-forbindelse må du ikke tilføje en lukning, blot fordi et svar er færdigt.
Undersøg future'ens fejl som en del af applikationens normale fejlhåndtering. Fuldførelse omfatter fejl og annullering, så fuldførelse alene er ikke en leveringskvittering fra browseren.
Den nyttige sammenligning er den fulde svarlængde og skriveudfaldet på hver vej. En proxy kan ændre timingen nok til at afsløre en eksisterende livscyklusfejl; dens tilstedeværelse beviser ikke, at dens kompressor eller cache kasserede bytesene.