מוצג המסמך של 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