מוצג המסמך של Apigee Edge.
  עוברים אל
     מסמכי תיעוד של Apigee X. מידע
תיאור הבעיה
    אפליקציית הלקוח מקבלת קוד סטטוס HTTP של 431 Request Header Fields Too
    Large עם קוד שגיאה protocol.http.TooBigHeaders  כתגובה ל-API
    שיחות.
  
הודעת שגיאה
אפליקציית הלקוח מקבלת את קוד התגובה הבא:
HTTP/1.1 431 Request Header Fields Too Large
בנוסף, יכול להיות שתופיע הודעת השגיאה הבאה:
{
   "fault":{
      "faultstring":"request headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}גורמים אפשריים
השגיאה הזו מתקבלת אם הגודל הכולל של כל כותרות הבקשה שנשלחו על ידי אפליקציית הלקוח אל Apigee Edge כחלק מבקשת ה-HTTP גדולה יותר מ- המגבלה המותרת ב-Apigee Edge לפי RFC 6585, סעיף 5: 431 שדות של כותרות בקשות גדולים מדי.
אלה הסיבות האפשריות לשגיאה הזו:
| סיבה | תיאור | הוראות לפתרון בעיות עבור | 
|---|---|---|
| גודל הכותרות של הבקשה חורג מהמגבלה המותרת | הגודל הכולל של כל הכותרות שנשלחו על ידי אפליקציית הלקוח כחלק מבקשת ה-HTTP אל ב-Apigee Edge חורג מהמגבלה המותרת ב-Apigee Edge. | משתמשי Edge בענן הציבורי והפרטי | 
שלבי אבחון נפוצים
יש להשתמש באחד מהכלים או השיטות הבאים כדי לאבחן את השגיאה:
מעקב API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- נכנסים ל-Apigee Edge UI כמשתמש עם התפקיד המתאים.
- עוברים לארגון שבו רוצים לחקור את הבעיה.   
- מנווטים אל ניתוח > מעקב API > לחקור את הדף.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
- הציגו את קוד התקלה ביחס ל-Time.
- צריך לבחור תא עם קוד התקלה protocol.http.TooBigHeadersקוד הסטטוס431כמו שמוצג בהמשך:  
- יופיע מידע על קוד השגיאה - protocol.http.TooBigHeadersכפי שמוצג בהמשך:  
- לוחצים על הצגת היומנים ומרחיבים את השורה של הבקשה שנכשלה:   
- בחלון יומנים שימו לב לפרטים הבאים: - קוד סטטוס: 431
- מקור התקלה: apigee
- קוד התקלה: protocol.http.TooBigHeaders.
- אורך הבקשה(בייטים): 32150 (> 25 KB)
 
- קוד סטטוס: 
- אם ל-Fault Source יש את הערך apigeeאוMP, קוד השגיאה כולל את הערךprotocol.http.TooBigHeadersו Request Length הוא יותר מ-25KB. זה אומר שהגודל הכולל של כל כותרות הבקשות שנשלחות על ידי אפליקציית הלקוח כחלק מבקשת HTTP גדולה יותר מאשר למגבלה ב-Apigee.
כלי המעקב
NGINX
כדי לאבחן את השגיאה באמצעות יומני הגישה של NGINX:
- אם אתם משתמשים בענן פרטי, תוכלו להשתמש ביומני הגישה ל-NGINX כדי
              לדעת את המידע העיקרי לגבי שגיאות HTTP 431.
- בודקים את יומני הגישה ל-NGINX: - /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- איפה: ORG, ENV ו-PORT# מוחלפים בערכים בפועל. 
- אפשר לחפש אם יש שגיאות 431בטווח זמן ספציפי (אם הבעיה אירעה בעבר) או אם יש בקשות שעדיין לא נענו431
- אם מופיעות שגיאות - 431בקוד X-Apigee-fault-code תואם לערך של- protocol.http.TooBigHeaders, ואז קובעים הערך של X-Apigee-fault-source.  - הרשומה לדוגמה שלמעלה מיומן הגישה ל-NGINX כוללת את הערכים הבאים עבור X-Apigee-fault-code ו-X-Apigee-fault-source: - כותרות של תשובות - ערך - X-Apigee-fault-code - protocol.http.TooBigHeaders- X-Apigee-fault-source - MP- לתשומת ליבכם: אורך הבקשה: - 40159(40 KB גדול מ-25KB, המגבלה המותרת לכותרות של בקשות ב-Apigee Edge)- ברשומת היומן לדוגמה שלמעלה, הערך של X-Apigee-fault-source מכיל את הערך. - apigeeאו- MP, ל-X-Apigee-fault-code יש את הערך- protocol.http.TooBigHeadersו-Request Length הוא 40 KB, כלומר יותר מהמגבלה המותרת ב-Apigee – 25KB. הדבר מציין בבירור הגודל הכולל של כל כותרות הבקשות שנשלחות על ידי אפליקציית הלקוח כחלק מ-HTTP הבקשה חרגה מהמגבלה המותרת של 25KB ב-Apigee Edge.
הסיבה: גודל כותרות הבקשה חורג מהמגבלה המותרת
אבחון
- קובעים את Fault Code (קוד התקלה), Fault Source וגודל בקשה-אורך של שנצפתה באמצעות יומני API Monitoring או NGINX Access, כמו שמוסבר ב שלבי האבחון הנפוצים.
- אם ל-Fault Source יש את הערך apigeeאוMP, קוד השגיאה כולל את הערךprotocol.http.TooBigHeaders, ו-Request Length יותר מ-25KB, אז זה מציין שגודל הבקשה שנשלח על ידי אפליקציית הלקוח ל-Apigee גדול מ- מותר להשתמש ב-Apigee Edge.
- אפשר לוודא שגודל הכותרות של הבקשה חרג מהמגבלה המותרת של 25 KB באמצעות אחת מהאפשרויות הבאות:
      אחת מהשיטות הבאות:
          הודעת שגיאהכדי לבצע אימות באמצעות הודעת השגיאה: אם יש לכם גישה להודעת השגיאה המלאה שהתקבלה מ-Apigee Edge, יש לעיין ב faultstring.faultstringמציין הגודל הכולל של כותרות הבקשה חרג מהמגבלה המותרת של 25KB.הודעת שגיאה לדוגמה: "faultstring":"request headers size exceeding 25,600" הבקשה בפועלכדי לאמת באמצעות הבקשה עצמה: אם יש לכם גישה לבקשה שנשלחה בפועל על ידי אפליקציית הלקוח, לאחר מכן מבצעים את השלבים הבאים: - צריך לאמת את גודל הכותרות שהועברו בבקשה.
- אם גיליתם שהגודל הכולל של הכותרות גדול מהגודל המגבלה המותרת ב-Apigee Edge, אז היא את הגורם לבעיה. - בקשה לדוגמה: - curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>" - במקרה שלמעלה, הגודל הכולל של הכותרות - header0,- header1,- header2ו-- header3גדול מ-25KB, כלומר מכיל יותר מ-25K K תווי ASCII (בייטים).- אם אתם משתמשים בלקוח אחר, אפשר לבדוק את יומני הלקוח לנסות לברר את הגודל של שורת הבקשה שנשלחת ל-Apigee Edge. 
 יומני מעבד ההודעותכדי לאמת באמצעות יומני מעבד הודעות: אם אתם משתמשים בענן פרטי, אתם יכולים להשתמש ביומנים של מעבד ההודעות כדי: לבדוק אם גודל כותרות הבקשה חרג מ- המגבלה המותרת ב-Apigee Edge. - בודקים את יומני מעבד ההודעות: - /opt/apigee/var/log/edge-message-processor/logs/system.log
- אפשר לחפש כדי לראות אם יש שגיאות 431במהלך תקופה ספציפית משך הזמן (אם הבעיה התרחשה בעבר) או אם יש בקשות כלשהן עדיין נכשל עם431. אפשר להשתמש במחרוזות החיפוש הבאות.grep -ri "exceeding" grep -ri "RequestHeadersTooLarge" 
- יופיעו שורות מ-system.logשדומות לאלה:2021-07-27 08:30:28,419 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:GET, uri:/test/, message Id:null, exception:com.apigee.errors.http.user.RequestHeadersTooLarge{ code = protocol.http.TooBigHeaders, message = request headers size exceeding 25,600, associated contexts = []}, context:Context@9c5903 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130 useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms lastIO=0ms isOpen=true) הטקסט message = request headers size exceeding 25,600במחרוזת הודעת השגיאה שלמעלה מציינת שהגודל הכולל של כותרות הבקשה גדול מ- 25KB. לכן, Apigee Edge מקפיצה את החריגcom.apigee.errors.http.user.RequestHeadersTooLargeוהחזרות קוד סטטוס431עם קוד שגיאהprotocol.http.TooBigHeadersלאפליקציות לקוח.
 
רזולוציה
תיקון הגודל
אפשרות מס' 1 [מומלץ]: תיקון אפליקציית הלקוח כך שלא תשלחו כותרות של בקשות עם הגודל הכולל חורג מהמגבלה המותרת
- ניתוח הסיבה שבגללה הלקוח הספציפי שלח כותרת בקשה עם גודל שגורם לגודל הכולל של הכותרת לחרוג מהמגבלה המותרת כפי שמוגדר מגבלות.
- אם לא, יש לשנות את אפליקציית הלקוח כך שהיא תשלח מבקשים כותרות בגודל הקטן מהמגבלה המותרת. - בדוגמה שלמעלה, ניתן לתקן את הבעיה על ידי העברת הכותרת הארוכה. ערכים כחלק מגוף הבקשה/מטען הייעודי (Payload): - curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
- אם רוצים לשלוח כותרת מעל המגבלה המותרת, עוברים אל לאפשרות הבאה.
CwC
אפשרות 2 : שימוש בנכס CwC כדי להגדיל את מגבלת השורות בבקשה
Apigee מספקת נכס CwC שמאפשר להגדיל את מגבלת הגודל של שורת הבקשה. פרטים נוספים זמינים במאמר הגדרת מגבלת שורות הבקשה במעבד ההודעות
מגבלות
Apigee מצפה שאפליקציית הלקוח ושרת הקצה העורפי לא ישלחו כותרות של בקשה/תגובה שהגודל שלהן גדול מהמגבלה המותרת כפי שמתועד עבור מגבלת הגודל של כותרת הבקשה/התגובה ב- מגבלות Apigee Edge.
- אם אתם משתמשים ב-Public Cloud, המגבלה המקסימלית הגודל של כותרות הבקשה והתגובה מתועד לפי גודל הכותרת של הבקשה/התגובה ב- מגבלות Apigee Edge.
- אם אתם משתמשים בענן פרטי , יכול להיות ששיניתם את ערך ברירת המחדל המקסימלי מגבלת הגודל של כותרות הבקשות והתשובות (למרות שזו לא שיטה מומלצת). כדי לקבוע את מגבלת הגודל המקסימלי של כותרת הבקשה, צריך לפעול לפי ההוראות הבאות: איך בודקים את המגבלה הנוכחית
איך בודקים את המגבלה הנוכחית?
    בקטע הזה מוסבר איך לאמת שהנכס HTTPRequest.headers.limit כולל
    עודכן בערך חדש ב'מעבדי הודעות'.
  
- במעבד הודעות, מחפשים את המאפיין.
        HTTPRequest.headers.limitב- ספריית/opt/apigee/edge-message-processor/confובדיקה רואים איזה ערך הוגדר באופן הבא:grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf 
- התוצאה לדוגמה מהפקודה שלמעלה היא:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k 
- בפלט לדוגמה שלמעלה, שימו לב שהמאפיין - HTTPRequest.headers.limitהוגדר עם הערך- 25kב-- http.properties.- מציינת שהמגבלה של גודל הכותרת של הבקשה מוגדרת ב-Apigee לחשבונות פרטיים גודל הענן הוא 25KB. 
מפרט
    Apigee Edge מצפה שאפליקציית הלקוח לא תשלח כותרות גדולות כחלק
    בקשה. אם הבקשה מכילה כותרות שהגודל הכולל שלהן חורג מהמגבלה שצוינה,
    Apigee זורקת את 431 Request Header Fields Too Large  בהתאם ל-RFC הבא
    מפרטים:
  
| מפרט | 
|---|
| RFC 6585, סעיף 5: שדות כותרת של בקשה 431 גדולים מדי | 
אם עדיין דרושה לך עזרה מהתמיכה של Apigee, אפשר לעבור אל חובה לאסוף את פרטי האבחון.
חובה לאסוף פרטי אבחון
אוספים את פרטי האבחון הבאים ופונים לתמיכה של Apigee Edge:
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-API של ה-Proxy
- צריך להשלים את הפקודה curlששימשה לשחזור השגיאה431
- קובץ מעקב אחר בקשות ה-API
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- הודעת שגיאה מלאה שנצפתה בבקשות שנכשלו
- שם הארגון
- שם הסביבה
- חבילת API Proxy
- קובץ מעקב לבקשות ה-API שנכשלו
- צריך להשלים את הפקודה curlששימשה לשחזור השגיאה431
- יומני גישה ל-NGINX - /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- איפה: ORG, ENV ו-PORT# מוחלפים ב: והערכים בפועל. 
- יומני מערכת של מעבד ההודעות /opt/apigee/var/log/edge-message-processor/logs/system.log