Egy kép gyors közvetlen kapcsolaton működik, de egy lassabb forward proxyn keresztül hiányos. Egy lehetséges ok, hogy az eredet lezárja a kapcsolatot, miközben a válasz még íródik.

A Netty I/O aszinkron. A writeAndFlush-ból való visszatérés nem jelenti azt, hogy a művelet befejeződött. Ezért ez a sorrend nem biztonságos olyan válasz esetén, amelynek még vannak sorban álló bájtjai:

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

Amikor a HTTP-csere szándékosan bezárul az utolsó válaszüzenete után, kapcsolja a lezárást az írás future-jéhez:

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

A részlet feltételezi, hogy a válasz már helyesen fel van építve és keretezve. Streamelt törzs esetén az utolsó üzenet befejeződését használja, ne a fejlécek írását. Állandó HTTP-kapcsolat esetén ne adjon hozzá lezárást csak azért, mert egy válasz befejeződött.

Vizsgálja meg a future hibáját az alkalmazás szokásos hibakezelésének részeként. A befejeződés magában foglalja a hibát és a megszakítást, így a befejeződés önmagában nem a böngésző kézbesítési visszaigazolása.

A hasznos összehasonlítás a válasz teljes hossza és az írás eredménye minden útvonalon. A proxy eléggé megváltoztathatja az időzítést, hogy felfedjen egy meglévő életciklus-hibát; jelenléte nem bizonyítja, hogy a tömörítője vagy a gyorsítótára eldobta a bájtokat.

Kapcsolódó cikkek