Et bilde fungerer over en rask direkte forbindelse, men er ufullstendig gjennom en tregere forward-proxy. En mulig årsak er at opphavet lukker forbindelsen mens svaret ennå skrives.

Netty I/O er asynkron. Å returnere fra writeAndFlush betyr ikke at operasjonen er fullført. Denne rekkefølgen er derfor utrygg for et svar som fortsatt har bytes i kø:

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

Når HTTP-utvekslingen bevisst lukkes etter sin siste svarmelding, knytt lukkingen til future-en for den skrivingen:

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

Utdraget forutsetter at svaret allerede er riktig bygget og innrammet. For en strømmet body bruk fullføringen av dens siste melding, ikke skrivingen av hodene. For en vedvarende HTTP-forbindelse må du ikke legge til en lukking bare fordi et svar er ferdig.

Undersøk feilen i future-en som en del av applikasjonens normale feilhåndtering. Fullføring omfatter feil og kansellering, så fullføring alene er ikke en leveringskvittering fra nettleseren.

Den nyttige sammenligningen er den fulle svarlengden og skriveresultatet på hver vei. En proxy kan endre timingen nok til å avdekke en eksisterende livssyklusfeil; dens tilstedeværelse beviser ikke at kompressoren eller hurtigbufferen kastet bytene.

Relaterte artikler