כרגע מוצג התיעוד של 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, section 5: 431 Request Header Fields too Large.
אלה הסיבות האפשריות לשגיאה הזו:
סיבה | תיאור | ההוראות לפתרון בעיות הרלוונטיות עבור |
---|---|---|
גודל הכותרות המבוקש חורג מהמגבלה המותרת | הגודל הכולל של כל הכותרות שנשלחו על ידי אפליקציית הלקוח כחלק מבקשת ה-HTTP ל-Apigee Edge גדול מהמגבלה המותרת ב-Apigee Edge. | משתמשי Edge הציבוריים והפרטיים |
שלבים נפוצים באבחון
אפשר להשתמש באחד מהכלים/הטכניקות הבאים כדי לאבחן את השגיאה הזו:
מעקב באמצעות API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- נכנסים לממשק המשתמש של Apigee Edge בתור משתמשים עם תפקיד מתאים.
עוברים לארגון שבו רוצים לבדוק את הבעיה.
- עוברים לדף ניתוח > API Monitoring > חקירה.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
- יש להציב את קוד השגיאה ביחס ל-Time.
- בוחרים תא שמכיל את קוד השגיאה
protocol.http.TooBigHeaders
ואת קוד הסטטוס431
, כפי שמוצג כאן: המידע על קוד התקלה
protocol.http.TooBigHeaders
יופיע כפי שמוצג כאן:לוחצים על View Logs (הצגת היומנים) ומרחיבים את השורה של הבקשה שנכשלה:
בחלון Logs, שימו לב לפרטים הבאים:
- קוד סטטוס:
431
- מקור התקלה:
apigee
- קוד תקלה:
protocol.http.TooBigHeaders
. - אורך הבקשה:
32150 (> 25 KB)
- קוד סטטוס:
- אם ל-Fault Source יש את הערך
apigee
אוMP
, הערך של Fault Code כולל את הערך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 שתואם לערך של X-Apigee-fault-code , צריך לקבוע את הערך של X-Apigee-fault-codeהרשומה לדוגמה שצוינה ביומן הגישה של NGINX כוללת את הערכים הבאים עבור X-Apigee-fault-code ו-X-Apigee-fault-code
כותרות תגובה Value X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source MP
הערה: אורך הבקשה:
40159
(40KB גדול מ-25KB, המגבלה המותרת לכותרות בקשה ב-Apigee Edge)ברשומת היומן לדוגמה שלמעלה, ל-X-Apigee-fault-source יש את הערך
apigee
אוMP
, ל-X-Apigee-fault-code יש את הערךprotocol.http.TooBigHeaders
ו-Request Length הוא 40 KB, גדול מהמגבלה המותרת ב-Apigee – 25 KB. זה מציין בבירור שהגודל הכולל של כל כותרות הבקשות שנשלחו על ידי אפליקציית הלקוח כחלק מבקשת ה-HTTP חרג מהמגבלה המותרת של 25KB ב-Apigee Edge.
הסיבה: הגודל של כותרות הבקשה חורג מהמגבלה המותרת
אבחון
- קובעים את קוד התקלה, מקור התקלה וגודל הבקשה לאורך זמן של השגיאה שזוהתה באמצעות יומני API Monitoring או יומני הגישה של NGINX, כפי שמוסבר בשלבים הנפוצים לאבחון.
- אם הערך של Fault Source הוא
apigee
אוMP
, הערך של Fault Code כולל את הערךprotocol.http.TooBigHeaders
ו-Request Length גדול מ-25KB. המשמעות היא שגודל הבקשה שנשלח על ידי אפליקציית הלקוח אל Apigee גדול מהמגבלה המותרת ב-Apigee Edge. - אפשר לוודא שגודל הכותרות של הבקשות חורג מהמגבלה המותרת של 25KB באחת מהשיטות הבאות:
הודעת השגיאה
כדי לבצע אימות באמצעות הודעת השגיאה:
אם יש לך גישה להודעת השגיאה המלאה שהתקבלה מ-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 תווי 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, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם שרת proxy ל-API
- צריך להשלים את הפקודה
curl
שמשמשת לשחזור השגיאה431
- קובץ מעקב לבקשות API
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- זוהתה הודעת שגיאה מלאה בבקשות שנכשלו
- שם הארגון
- שם הסביבה
- חבילת שרת proxy ל-API
- קובץ מעקב לבקשות 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