cloudflare חבילות של post ללא content-length
-
לאחרונה קיבלתי דיווחים על באגים ואיטיות במערכת שעשיתי ועובדת כבר שנים (עם שינויים פה ושם).
השגיאה בקונסול הייתה 411 של כותרת content-length חסרה, וזה קרה אקראית בממוצע פעם בארבעה בקשות, שלכאורה הצד השווה של כולם שהם היו post ללא תוכן (empty body).
מי שמפיק אותה, התברר, הוא הדרייבר http.sys שמסנן את הבקשה עוד לפני שהיא מגיעה לIIS, הסינון הזה מתועד בקבצי לוג בשם httperrXYZ.log.
@yossiz מייד העיר לי לבדוק אם זה רק דרך cloudflare. ואכן בגישה ישירה הבעיה לא חזרה על עצמה.
אז פניתי לדשבורד של cloudflare בניסיון לשנות איזה הגדרה, בפרט את http2 to origin (יוסי אמר לי שבפרוטוקול http2 הכותרת של האורך לא נדרשת)
לא עזר לי שום דבר.
בלית ברירה פניתי לקוד וניסיתי לשתול בכל בקשת post ריקה תוכן כל שהוא,
באמת זה עזר ב90 אחוז, אבל היו כמה מקומות שהמשיכו לתת שגיאה למרות השינוי (כלומר post לא ריקים).
בלתי ברירה הוצרכתי לוותר על שירותי cloudflare.
פה היה לי עוד תת סיפור קטן: השרת עליו הIIS הוא שרת פיזי במקום העבודה, וממילא העובדים של מקום העבודה בעצם אמורים לפנות אליו בLAN ולא צריכים לפנות החוצה.
בפועל בגלל cloudflare הכל עבר דרך שרתים חיצוניים, אבל כשהפניתי את הדומיין ישירות לאייפי של השרת, הייתה בעיה שזה עבד לכל העולם מלבד אלו שבמשרד.
הכרתי כבר את הבעיה הזו, ניסיתי לפתור אותה באמצעות הDNS של הראוטר (להפנות את הדומיין לכתובת הלוקלית), אבל התברר שהמחשבים מופנים לDNS של הDC ושם פתרתי את הבעיה.
מGPT הבנתי שיש עוד דרך Hairpin NAT שזה אומר שהראוטר לוכד חבילות עם היעד ומסובב אותם לכתובת פנימית, אבל לא עשיתי את הפתרון הזה.מספר את זה פה למקרה שזה קורה למישהו בגלובוס (אולי בתיווכם האדיב של עכבישי הAI...).