Proxy üzerinden eksik görseller: Netty'nin yazma tamamlanmasını kontrol edin
Görseller proxy üzerinden eksik geldiğinde, kaynağın Netty kanalını eşzamansız yanıt yazımı tamamlanmadan kapatıp kapatmadığını inceleyin.
Bir görsel hızlı doğrudan bağlantıda çalışır, ancak daha yavaş bir forward proxy üzerinden eksik gelir. Olası bir neden, kaynağın yanıtı hâlâ yazılırken bağlantıyı kapatmasıdır.
Netty G/Ç eşzamansızdır. writeAndFlush'tan dönmek, o işlemin tamamlandığı anlamına gelmez. Bu nedenle bu sıralama, kuyruğunda hâlâ bayt bulunan bir yanıt için güvenli değildir:
ctx.writeAndFlush(response);
ctx.close();
HTTP alışverişi son yanıt mesajından sonra bilerek kapatılıyorsa, kapatmayı o yazmanın future'ına bağlayın:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
Bu bölüm yanıtın zaten doğru şekilde oluşturulduğunu ve çerçevelendiğini varsayar. Akış halinde gönderilen bir gövde için başlıkların yazılmasını değil, son mesajın tamamlanmasını kullanın. Kalıcı bir HTTP bağlantısı için yalnızca bir yanıt bitti diye kapatma eklemeyin.
future'ın başarısızlığını uygulamanın normal hata işlemesinin bir parçası olarak inceleyin. Tamamlanma, başarısızlığı ve iptali içerir; bu nedenle tamamlanma tek başına tarayıcıdan gelen bir teslim makbuzu değildir.
Yararlı karşılaştırma, her yolda yanıtın tam uzunluğu ve yazma sonucudur. Proxy, zamanlamayı mevcut bir yaşam döngüsü hatasını ortaya çıkaracak kadar değiştirebilir; varlığı, sıkıştırıcısının veya önbelleğinin baytları attığını kanıtlamaz.