תמונות לא שלמות דרך פרוקסי: בדיקת השלמת הכתיבה של Netty
כאשר תמונות מגיעות לא שלמות דרך פרוקסי, בדקו אם המקור סוגר את ערוץ ה-Netty לפני שהכתיבה האסינכרונית של התגובה מסתיימת.
תמונה עובדת בחיבור ישיר מהיר, אך מגיעה לא שלמה דרך פרוקסי קדמי איטי יותר. סיבה אפשרית אחת היא שהמקור סוגר את החיבור בזמן שהתגובה שלו עדיין נכתבת.
קלט/פלט של Netty הוא אסינכרוני. חזרה מ-writeAndFlush אינה אומרת שהפעולה הושלמה. לכן הסדר הזה אינו בטוח עבור תגובה שעדיין יש לה בייטים בתור:
ctx.writeAndFlush(response);
ctx.close();
כאשר מחלף ה-HTTP נסגר בכוונה לאחר הודעת התגובה האחרונה שלו, חברו את הסגירה ל-future של הכתיבה הזו:
ctx.writeAndFlush(finalResponseMessage)
.addListener(ChannelFutureListener.CLOSE);
הקטע מניח שהתגובה כבר נבנתה והוסגרה כראוי. עבור גוף משודר, השתמשו בהשלמת ההודעה האחרונה שלו ולא בכתיבת הכותרות. עבור חיבור HTTP מתמשך, אל תוסיפו סגירה רק מפני שתגובה הסתיימה.
בדקו את כשל ה-future כחלק מטיפול השגיאות הרגיל של היישום. השלמה כוללת כשל וביטול, ולכן השלמה לבדה אינה אישור מסירה מהדפדפן.
ההשוואה השימושית היא אורך התגובה המלא ותוצאת הכתיבה בכל נתיב. פרוקסי יכול לשנות את התזמון מספיק כדי לחשוף שגיאת מחזור חיים קיימת; נוכחותו אינה מוכיחה שהמדחס או המטמון שלו השליכו את הבייטים.