מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד סטטוס HTTP של 414 Request-URI Too Long עם
קוד שגיאה protocol.http.TooBigLine כתגובה לקריאות ל-API.
הודעת שגיאה
אפליקציית הלקוח מקבלת את קוד התגובה הבא:
HTTP/1.1 414 Request-URI Too Long
בנוסף, יכול להיות שתופיע הודעת השגיאה הבאה:
{
"fault":{
"faultstring":"request line size exceeding 7,168",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
}
לתשומת ליבך: ה-faultstring בהודעת השגיאה שלמעלה מכיל את המגבלה המותרת
לשורת הבקשה ב-Apigee Edge, שהיא 7168 bytes (7 KB).
גורמים אפשריים
השגיאה הזו מתקבלת אם גודל שורת הבקשה שנשלחה על ידי אפליקציית הלקוח ל-Apigee Edge כחלק מבקשת HTTP גדולה מהמגבלה המותרת ב-Apigee Edge.
לפני שנבדוק את הסיבות האפשריות לשגיאה הזו, יש להבין מהי שורת הבקשה ואיך לבדוק את הגודל שלו.
הסבר על שורת הבקשה
בקשת HTTP אופיינית מורכבת משלושה חלקים:
- שורת בקשה
- ( קבוצה של כותרות HTTP )
- [ גוף ]
שורת הבקשה מורכבת משלושה חלקים כפי שמוצג בהמשך.
Request-Line = <Method> <Request-URI> <HTTP-Version>
כשאפליקציית הלקוח שולחת בקשת HTTP אל שרת, השורה הראשונה שמועברת אל השרת מכיל את שורת הבקשה שמתוארת למעלה. אחריו מופיע וגוף הבקשה/מטען ייעודי (payload).
בצילום המסך לדוגמה הבא מוצגת בקשה אופיינית של curl, הבקשה
החלק (יחד עם Request-Line) והחלק Response.
הסבר על הגודל של שורת הבקשה
- בדוגמה שלמעלה, שורת start (השורה הראשונה) בבקשה, גם היא
שנקרא Request-Line, הוא כך:
GET /test/ HTTP/1.1
הגודל של שורת הבקשה הוא
~19 bytesמפני שהיא מכילה19 ASCII characters. מאחר שזו בתוך מותרת ב-Apigee Edge, הבקשה תעובד ללא שגיאות ומקבלים תשובה מוצלחת. - באופן דומה, אם מסתכלים על
faultstringבשדה הודעת השגיאה שמוצגת למעלה. היא מכילה"request line size exceeding 7,168". הדבר מציין ששורת הבקשה בבקשת ה-HTTP שנשלחה על ידי הלקוח חרגה 7,168 בייטים.
אלה הסיבות האפשריות לשגיאה הזו:
| סיבה | תיאור | הוראות לפתרון בעיות עבור |
|---|---|---|
| גודל המטען הייעודי (payload) של הבקשה חורג מהמגבלה המותרת | הגודל של ה-Request-URI שנשלח על ידי אפליקציית הלקוח כחלק מה-HTTP הבקשה ל-Apigee Edge גדולה מהמגבלה המותרת ב-Apigee Edge. | משתמשי Edge בענן הציבורי והפרטי |
שלבי אבחון נפוצים
יש להשתמש באחד מהכלים או השיטות הבאים כדי לאבחן את השגיאה:
מעקב API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- נכנסים ל-Apigee Edge UI כמשתמש עם התפקיד המתאים.
עוברים לארגון שבו רוצים לחקור את הבעיה.
- מנווטים אל ניתוח > מעקב API > לחקור את הדף.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
- הציגו את קוד התקלה ביחס ל-Time.
- צריך לבחור תא עם קוד התקלה
protocol.http.TooBigLineקוד הסטטוס414כמו שמוצג בהמשך:
יופיע מידע על קוד השגיאה
protocol.http.TooBiglineכפי שמוצג בהמשך:
לוחצים על הצגת היומנים ומרחיבים את השורה של הבקשה שנכשלה:
בחלון יומנים שימו לב לפרטים הבאים:
- קוד סטטוס:
414 - מקור התקלה:
apigee - קוד התקלה:
protocol.http.TooBigLine. - אורך הבקשה(בייטים):
7244 (> 7KB)
- קוד סטטוס:
- אם ל-Fault Source יש את הערך
apigeeאוMP, קוד השגיאה כולל את הערךprotocol.http.TooBigLineו הערך Request-Length יותר מ-7KB מציין שבקשת ה-HTTP מהלקוח יש URI של בקשה גדול מ- למגבלה ב-Apigee.
כלי המעקב
NGINX
כדי לאבחן את השגיאה באמצעות יומני הגישה של NGINX:
- אם אתם משתמשים בענן פרטי, תוכלו להשתמש ביומני הגישה ל-NGINX כדי
לדעת את המידע העיקרי לגבי שגיאות HTTP
414. בודקים את יומני הגישה ל-NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logאיפה: ORG, ENV ו-PORT# מוחלפים בערכים בפועל.
- אפשר לחפש אם יש שגיאות
414בטווח זמן ספציפי (אם הבעיה אירעה בעבר) או אם יש בקשות שעדיין לא נענו414 אם מופיעות שגיאות
414בקוד X-Apigee-fault-code תואם לערך שלprotocol.http.TooBigLine, ואז קובעים הערך של X-Apigee-fault-source.
הרשומה לדוגמה שלמעלה מיומן הגישה ל-NGINX כוללת את הערכים הבאים עבור X-Apigee-fault-code ו-X-Apigee-fault-source:
כותרות של תשובות ערך X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source policyלתשומת ליבכם: אורך הבקשה:
7244(7.244KB > המגבלה המותרת)
הסיבה: גודל המטען הייעודי (payload) של הבקשה חורג מהמגבלה המותרת
אבחון
- קובעים את Fault Code (קוד התקלה), Fault Source וגודל בקשה-אורך של שגיאה שזוהתה באמצעות יומני API Monitoring, Trace Tool או NGINX Access כמו שמוסבר ב- שלבי האבחון הנפוצים.
- אם מקור התקלה מכיל את הערך
apigeeאוMP, הערך הזה מציין שגודל הבקשה שנשלח על ידי אפליקציית הלקוח ל-Apigee גדול מ- המגבלה המותרת ב-Apigee Edge. - אפשר לוודא שגודל שורת הבקשה חרג מהמגבלה המותרת של 7 KB באמצעות אחת מהאפשרויות הבאות:
אחת מהשיטות הבאות:
הודעת שגיאה
כדי לבצע אימות באמצעות הודעת השגיאה:
אם יש לכם גישה להודעת השגיאה המלאה שהתקבלה מ-Apigee Edge, יש לעיין ב
faultstring.faultstringמציין הגודל של שורת הבקשה חורג מהמגבלה המותרת של 7KB.הודעת שגיאה לדוגמה:
"faultstring":"request line size exceeding 7,168"
הבקשה בפועל
כדי לאמת באמצעות הבקשה עצמה:
אם יש לכם גישה לבקשה שנשלחה בפועל על ידי אפליקציית הלקוח, לאחר מכן מבצעים את השלבים הבאים:
- אימות גודל ה-URI שהועבר בבקשה.
אם גודל ה-URI גדול מ המגבלה המותרת ב-Apigee Edge, אז היא את הגורם לבעיה.
בקשה לדוגמה:
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
במקרה שלמעלה, הערך של פרמטר השאילתה
qparamגדול מ-7KB, כלומר הוא מכיל יותר מ-7 K תווי ASCII.אם אתם משתמשים בלקוח אחר, אפשר לבדוק את יומני הלקוח לנסות לברר את הגודל של שורת הבקשה שנשלחת ל-Apigee Edge.
יומני מעבד ההודעות
כדי לאמת באמצעות יומני מעבד הודעות:
אם אתם משתמשים בענן פרטי, אתם יכולים להשתמש ביומנים של מעבד ההודעות כדי: לאמת אם הגודל של שורת הבקשה חרג המגבלה המותרת ב-Apigee Edge.
בודקים את יומני מעבד ההודעות:
/opt/apigee/var/log/edge-message-processor/logs/system.log- אפשר לחפש כדי לראות אם יש שגיאות
414במהלך משך הזמן (אם הבעיה התרחשה בעבר) או אם יש בקשות כלשהן עדיין נכשל עם414. אפשר להשתמש במחרוזות החיפוש הבאות.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- יופיעו שורות מ-
system.logשדומות לאלה:2021-07-12 08:53:31,461 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:null, uri:null, message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{ code = protocol.http.TooBigLine, message = request line size exceeding 7,168, associated contexts = []}, context:Context@366f4217 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443 Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849 age=2254670ms lastIO=0ms isOpen=true)
הטקסט
message = request line size exceeding 7,168במחרוזת הודעת השגיאה שלמעלה מציינת שגודל ה-URI של הבקשה גדול מ-7KB. לכן, Apigee Edge מקפיצה את החריגcom.apigee.errors.http.user.RequestURITooLongוהחזרות קוד סטטוס414עם קוד שגיאהprotocol.http.TooBiglineלאפליקציות לקוח.
רזולוציה
תיקון הגודל
אפשרות מס' 1 [מומלץ]: תיקון אפליקציית הלקוח כך שלא תישלח בקשה בגודל URI שגדול מהמגבלה המותרת
- ניתוח הסיבה לכך שהלקוח הספציפי שלח בקשה בגודל ה-URI גדול מ- המגבלה המותרת כפי שמוגדר במגבלות.
אם לא רוצים לעשות זאת, יש לשנות את אפליקציית הלקוח כך שתשלח URI של בקשה. הגודל קטן מהמגבלה המותרת.
בדוגמה שלמעלה, ניתן לתקן את הבעיה על ידי העברת השאילתה הארוכה. כחלק מגוף הבקשה/מטען הייעודי (Payload) במקום להעביר אותם כחלק כתובת URL של הבקשה כפי שמוצג בהמשך:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v- אם זה רצוי ואתם רוצים לשלוח URI שחורג מהמגבלה המותרת, עוברים אל האפשרויות הבאות.
CwC
אפשרות 2 : שימוש בנכס CwC כדי להגדיל את מגבלת השורות בבקשה
Apigee מספקת נכס CwC שמאפשר להגדיל את מגבלת הגודל של שורת הבקשה. פרטים נוספים זמינים במאמר הגדרת מגבלת שורות הבקשה במעבד ההודעות
מגבלות
Apigee מצפה שאפליקציית הלקוח ושרת הקצה העורפי לא ישלחו בקשה/תגובה שהגדלים שלהם גדולים מהמגבלה המותרת לפי תיעוד של מגבלת שורות הבקשות/התגובה. במגבלות של Apigee Edge.
- אם אתם משתמשים בענן הציבורי, המגבלה המקסימלית של בקשה וכן גודל שורת התגובה מתועד עבור גודל שורת הבקשה/תגובה ב- מגבלות Apigee Edge.
- אם אתם משתמשים בענן פרטי , יכול להיות ששיניתם את ערך ברירת המחדל המקסימלי מגבלת הגודל של הבקשה ושל שורת התגובה (למרות שזו לא שיטה מומלצת). כדי לקבוע את מגבלת הגודל המקסימלי של שורת הבקשה, צריך לפעול לפי ההוראות הבאות ב- איך בודקים את המגבלה הנוכחית
איך בודקים את המגבלה הנוכחית?
בקטע הזה מוסבר איך לאמת שהנכס HTTPRequest.line.limit כולל
עודכן בערך חדש ב'מעבדי הודעות'.
- במעבד הודעות, מחפשים את המאפיין.
HTTPRequest.line.limitב- ספריית/opt/apigee/edge-message-processor/confובדיקה רואים איזה ערך הוגדר באופן הבא:grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
- התוצאה לדוגמה מהפקודה שלמעלה היא:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
בפלט לדוגמה שלמעלה, שימו לב שהמאפיין
HTTPRequest.line.limitהוגדר עם הערך7kב-http.properties.מציינת שהמגבלה של גודל שורת הבקשה שהוגדרה ב-Apigee לפרטי גודל הענן הוא 7KB.
אם עדיין דרושה לך עזרה מהתמיכה של Apigee, אפשר לעבור אל חובה לאסוף את פרטי האבחון.
חובה לאסוף פרטי אבחון
אוספים את פרטי האבחון הבאים ופונים לתמיכה של Apigee Edge:
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-API של ה-Proxy
- צריך להשלים את הפקודה
curlששימשה לשחזור השגיאה414 - קובץ מעקב אחר בקשות ה-API
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- הודעת שגיאה מלאה שנצפתה בבקשות שנכשלו
- שם הארגון
- שם הסביבה
- חבילת API Proxy
- קובץ מעקב לבקשות ה-API שנכשלו
- צריך להשלים את הפקודה
curlששימשה לשחזור השגיאה414 יומני גישה ל-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