הבנת שגיאת HTTP 431: מדריך למפתחים

קוד המצב HTTP 431, הידוע גם כ"שדות כותרת בקשה גדולים מדי", הוא שגיאה מצד הלקוח שמציינת שהשרת מסרב לעבד בקשה מכיוון ששדות הכותרת שלה גדולים מדי. שגיאה זו יכולה להיגרם עקב גודל כולל של הכותרות או עקב שדה כותרת בודד שחורג מהגודל המותר.

קוד המצב HTTP 431 הוצג לראשונה בRFC 6585, שפורסם באפריל 2012. זה היה חלק ממאמץ לתקנן תגובות נוספות ל HTTP/1.1, שהתייחסו לבעיות שלא כוסו על ידי קודי המצב הקיימים בזמנו. הצגת קוד השגיאה המסוים הזה הייתה קריטית לשיפור אבטחת השרת ולמניעת התקפות זדוניות כמו התקפות עומס יתר, שיכולות לנצלכותרות גדולות.

הבנת שגיאת HTTP 431

כאשר מתרחשת שגיאה 431, זה אומר שהשרת חסם את בקשת הלקוח עקב שדות כותרת גדולים מדי. לכל שרת יש מדיניות משלו לגבי הגודל המרבי המותר לשדות כותרת HTTP, מה שעוזר להגן מפני התקפות מניעת שירות.

תסמינים נפוצים של שגיאות HTTP 431

  • גודל כולל של כותרות בקשה גדול מדי: שגיאה זו מתרחשת כאשר הגודל המצטבר של כל כותרות הבקשה חורג מהמגבלה.
  • גודל של שדה כותרת בודד גדול מדי: במקרה זה, שדה כותרת בודד הוא גדול מדי לעיבוד, מה שמוביל לשגיאה 431.

סיבות נפוצות לשגיאות HTTP 431

  • יותר מידי קוקיז: קיום קוקיז גדולים או רבים מדי יכול לגרום לשגיאה 431. זה יכול לקרות אם אותם קוקיז מוגדרים פעמים רבות או אם מספר קוקיז משולבים בבקשה אחת או בתגובה אחת. תרחיש נפוץ הוא שימוש חוזר באותו פורט localhost עבור מספר פרויקטים ושליחת כל קוקיז של אותם פרויקטים יחד עם בקשה.
  • אחסון שדות כותרת בצורה לא נכונה: אחסון כותרות גדולות בצורה לא נכונה יכול להוביל לשגיאה 431. אחסון לא נכון יכול להגדיל את גודל הכותרת, מה שגורם לעומס יתר על המאגר.
  • שדות בקשה לא נחוצים או מעוצבים בצורה לא נכונה: שימוש יתר בכותרות HTTP יכול להוביל לבקשות שחורגות מהמגבלות על גודל שהוגדרו על ידי השרת, מה שמוביל לתגובה 431. בנוסף, ודא שהכותרות שלך מעוצבות כראוי. כותרת Referer שהיא ארוכה מדי יכולה להפעיל שגיאה 431.

איך להימנע משגיאה 431

נקה קוקיז

נקה קוקיז בצד הלקוח באופן קבוע (כלי מפתח כרום > אפליקציה > קוקיז) והגבל את מספר הקוקיז שבהם משתמשים בשרת.

אחסון כותרות

הטמעת מטמון כותרות בצורה נכונה כדי להבטיח שהכותרות המטמונות משקפות את הבקשה האמיתית ותגובת הדחיסה. התאם את ETags אם אתה תלוי בהם במידה רבה לבקשות מותנות, כי ETags גדולים יכולים לתרום לשגיאה.

מזעור כותרות HTTP

פשט את כותרות ה-HTTP שלך כך שיכללו רק מידע הכרחי. הימנע מהכללת מטא-דטה מיותר, במיוחד בכותרות כמו Authorization, Referer ו-User-Agent.

דחיסת גודל הכותרת

לפעמים, אתה לא שולח מספיק כותרות והכותרות שלך מנופחות בגלל מגבלות שאינן תלויות בך (למשל, טוקן ה-JWT שלך מקודד כמות גדולה של מידע). דחיסת כותרות יכולה להפחית במידה ניכרת את גודל כותרות הבקשה שלך. השתמש בפרוטוקולים כמו HTTP/2 ו-HTTP/3, שתומכים בדחיסת כותרות כברירת מחדל. זה יכול להפחית אוטומטית את גודל הכותרות שלך ללא צורך בתצורה נוספת.

התמודדות עם מגבלות גודל כותרת מקסימלי של שרת

המפרט של HTTP לא מגדיר מגבלה על גודל הכותרת; עם זאת, הרבה שרתים כן. הנה המגבלות עבור שרתי/מארחי אינטרנט פופולריים שונים:

  • Apache: 8K
  • nginx: 4K-8K
  • IIS: 8K-16K
  • Tomcat: 8K-48K
  • Node: (<13) – 8K; (>13) – 16K
  • Cloudflare: 16K לכותרת, 32K סך הכל

רוב השרתים מאפשרים צורה מסוימת של תצורה, וגרסאות שונות של תוכנת השרת עשויות להיות עם מגבלות נמוכות או גבוהות יותר. כמו כן, עליך לבדוק את התיעוד העדכני ביותר כדי לראות אם המגבלות הללו כוללות חלקים אחרים של הבקשה (למשל, קוקיז) או רק את הכותרות הרגילות.

הגדלת מגבלת גודל כותרת הבקשה

לפעמים, ייתכן שיהיה צורך בהגדלת מגבלת גודל כותרת הבקשה. בדרך כלל ניתן לעשות זאת מהקונסולה הוובית או ה-CLI של השרת שלך. אם אתה מפתח באופן מקומי, יש בדרך כלל דגלי CLI שיכולים לתצרף את הערך הזה. הנה הדגל לתצרף מגבלות גודל כותרת בקשה ב-Node JS:

Shell

 

שים לב: הגדלת מגבלת גודל הכותרת צריכה להיעשות בזהירות, כי כותרות גדולות יותר יכולות לצרוך יותר זיכרון ולהוריד את הביצועים.

איך לשלוח תגובות שגיאה HTTP 431

ייתכן שלא תרצה לסמוך על השרת שלך לקביעת מגבלת גודל כותרת הבקשה שלך, או שאולי אתה רוצה לאכוף מגבלת גודל כותרת מותאמת אישית לכל נקודת קצה של API. עקוב אחרי השלבים הבאים כדי ללמוד איך לשלוח שגיאות 431 משלך.

שילוב מגבלות גודל כותרת בקשה ב-API שלך

כמו שצוין למעלה, סיבוב המארח + השרת שלך כנראה יאכוף אוטומטית מגבלה. כדי לבנות יכולת מגבלת גודל כותרת בקשה מותאמת אישית ב-API שלך, ניתן להשתמש בספריות כמו express ב-Node.js. הנה דוגמה הממחישה איך לאפשר מגבלות על גודל כותרות בקשה:

JavaScript

 

הבחנה בין תגובות שגיאה לגבי גודל כולל של כותרות בקשה ושדה כותרת בודד

כשמטפלים בשגיאת HTTP 431, יש להבחין בין שני מצבים:

  1. גודל כולל של כותרות בקשה גדול מדי: החזר תגובה המציינת כי הגודל המצטבר של הכותרות גדול מדי.
  2. גודל של שדה כותרת בודד גדול מדי: במקרה זה, ספק תגובת שגיאה המציינת איזה שדה כותרת מסוים חורג מהגודל המותר.

שנה את הדוגמה מהקטע הקודם כדי להשיג תגובות שגיאה מובחנות:

JavaScript

 

דוגמה לתגובת HTTP 431

אנו ממליצים להשיב למשתמשים שלך באמצעות פורמט תגובת API של פרטי בעיה.

JSON

 

לתת לשער הכניסה שלך להתמודד עם מגבלות גודל של כותרות בקשה

אם אתה משתמש בשער API, אתה יכול בקלות להוסיף מדיניות למסלול הבקשה שלך כדי להתמודד עם זה. הנה איך לעשות זאת באמצעות Zuplo:

עבור לנתיב שלך ב מעצב נתיבים ולחץ על הוסף מדיניות במסלול הבקשה.

בחלון בחר מדיניות, יש לנו שתי אפשרויות בהתאם למה שאתה רוצה לעשות.

  1. הגבל את גודל הבקשה כולה עם מדיניות מגבלת גודל בקשה.
  2. השתמש ב- מדיניות קוד מותאם אישית נכנסת והעתק את דוגמת הקוד מלמעלה (ללא החלקים המהירים) לתוך מודול טייפסקריפט שיוחבר למדיניות.

מסקנה

שגיאת HTTP 431 נפוצה כתוצאה מראשי דף בגודל גדול מדי. ניתן להימנע מהשגיאה הזו על ידי עיצוב מחדש של ראשי הדף שלך, דחיסתם ככל שנדרש, ויישום מגבלות גודל על ראשי דף ב-API שלך.

בנוסף, יישום בדיקות מגבלת גודל של ראשי דף ב-API שלך הוא פשוט. רוב השרתים כבר כוללים ברירות מחדל, ואתה יכול גם לעשות את זה בעצמך ברמות הסכום והבודדות של נתיבי ה-API שלך.

Source:
https://dzone.com/articles/understanding-the-http-431-error