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