אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד סטטוס של HTTP 502 Bad Gateway עם קוד השגיאה protocol.http.ResponseWithBody כתגובה לקריאות ל-API.
הודעת שגיאה
אפליקציית הלקוח מקבלת את קוד התגובה הבא:
HTTP/1.1 502 Bad Gateway
בנוסף, יכול להיות שתופיע אחת מהודעות השגיאה הבאות:
{
"fault":{
"faultstring":"Received 204 Response with message body",
"detail":{
"errorcode":"protocol.http.ResponseWithBody"
}
}
}{
"fault":{
"faultstring":"Received 205 Response with message body",
"detail":{
"errorcode":"protocol.http.ResponseWithBody"
}
}
}גורמים אפשריים
השגיאה הזו מתרחשת אם תגובת ה-HTTP משרת ה-Backend אל Apigee Edge היא 204 No Content או 205 Reset Content, אבל היא מכילה את גוף התגובה או אחת או יותר מהכותרות הבאות:
Content-LengthContent-EncodingTransfer-Encoding
בהתאם למפרטים
RFC 7231, סעיף 6.3.5: 204 No Content ו-
RFC 7231, סעיף 6.3.6: 205 Reset Content, השרת המקורי לא אמור לשלוח תוכן נוסף כחלק מגוף מטען התגובה עם קוד הסטטוס 204 No
Content או 205 Reset Content. כותרות התגובה, כמו Content-Length, Content-Encoding או Transfer-Encoding, מציינות את הגודל, הסוג או הפורמט של מטען הייעודי (payload) של התגובה.
לכן, Apigee Edge מחזיר קוד סטטוס 502 Bad Gateway עם קוד השגיאה protocol.http.ResponseWithBody ללקוח בנסיבות הבאות:
| קוד סטטוס משרת הקצה העורפי | ||
|---|---|---|
| התגובה משרת הקצה העורפי מכילה | 204 No Content | 205 Reset Content |
| גוף התגובה | שגיאה | שגיאה |
כותרת (מוגדר כערך שאינו אפס) |
שגיאה | שגיאה |
(מוגדר לערך supported encoding in Apigee Edge) |
שגיאה | אין שגיאה |
Transfer-Encoding |
שגיאה | שגיאה |
אלה הסיבות האפשריות לשגיאה הזו:
| סיבה | תיאור | הוראות לפתרון בעיות שרלוונטיות ל |
|---|---|---|
| גוף התגובה או הכותרות עם תגובה 204 משרת הקצה העורפי | שרת הקצה העורפי שולח תגובה מסוג 204 No Content או 205 Reset Content עם גוף תגובה ו/או אחת או יותר מהכותרות Content-Type, Content-Encoding או Transfer-Encoding. |
משתמשים ב-Edge Public Cloud וב-Edge Private Cloud |
שלבים נפוצים לאבחון
כדי לאבחן את השגיאה הזו, אפשר להשתמש באחד מהכלים או מהטכניקות הבאים:
API Monitoring
כדי לאבחן את השגיאה באמצעות הכלי 'מעקב אחר API':
- נכנסים לממשק המשתמש של Apigee Edge כמשתמש עם תפקיד מתאים.
עוברים לארגון שבו רוצים לבדוק את הבעיה.
- עוברים לדף Analyze > API Monitoring > Investigate.
- בוחרים את מסגרת הזמן הספציפית שבה נתקלת בשגיאות.
- משרטטים את קוד התקלה מול הזמן.
בוחרים תא עם קוד השגיאה
protocol.http.ResponseWithBodyכמו בדוגמה הבאה:( הגדלת התמונה)
יוצג מידע על קוד התקלה
protocol.http.ResponseWithBodyכמו בדוגמה הבאה:( הגדלת התמונה)
לוחצים על הצגת יומנים ומרחיבים את השורה של הבקשה שנכשלה.
( הגדלת התמונה)
- בחלון יומנים, רושמים את הפרטים הבאים:
- קוד סטטוס:
502 - מקור התקלה:
target - קוד שגיאה:
protocol.http.ResponseWithBody.
- קוד סטטוס:
- אם הערך של Fault Source הוא
targetוהערך של Fault Code הואprotocol.http.ResponseWithBody, המשמעות היא שהשגיאה התרחשה כי שרת הקצה העורפי שלח קוד סטטוס204 No Contentאו205 Reset Contentעם גוף התגובה או עם אחת מהכותרות שמוזכרות בקטע Possible causes.
כלי המעקב
כדי לאבחן את השגיאה באמצעות הכלי Trace:
- מפעילים את trace session (מעקב אחר סשן) ואחת מהאפשרויות הבאות:
- מחכים שהשגיאה
502 Bad Gatewayתתרחש. או - אם אתם מצליחים לשחזר את הבעיה, מבצעים את קריאה ל-API ומשחזרים את השגיאה
502 Bad Gateway.
- מחכים שהשגיאה
מוודאים שהאפשרות הצגת כל פרטי הזרימה מופעלת:
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- אפשר לנווט בין השלבים השונים של ה-trace ולמצוא את המקום שבו התרחשה השגיאה.
בדרך כלל השגיאה מופיעה ב
flowinfoError מיד אחרי השלב Request sent to target server, כמו שמוצג כאן:תרחיש #1
תרחיש מספר 1: שרת הקצה העורפי מגיב עם קוד סטטוס
204 No Contentשמכיל את גוף התגובה ו/או אחת מהכותרות שמפורטות בסיבות אפשריות.
שימו לב לערכים הבאים מהמעקב:
- שגיאה:
Received 204 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
תרחיש מספר 2
תרחיש מספר 2: שרת הקצה העורפי מגיב עם קוד סטטוס
204 No Contentשמכיל את גוף התגובה או אחת מהכותרות שמפורטות בסיבות אפשריות.
שימו לב לערכים הבאים מהמעקב:
- שגיאה:
Received 205 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
- שגיאה:
- עוברים לשלב AX (נתוני Analytics שתועדו) במעקב ולוחצים עליו.
גוללים למטה לקטע Phase Details (פרטי השלב) או Error Headers (כותרות שגיאה) וקובעים את הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source, כמו שמוצג בהמשך:
( הגדלת התמונה)
- שימו לב לערכים של X-Apigee-fault-code ו-X-Apigee-fault-source
are protocol.http.ResponseWithBodyו-targetבהתאמה. השגיאה הזו מציינת שהיא התרחשה כי שרת הקצה העורפי שלח קוד סטטוס204 No Contentאו205 Reset Contentעם גוף התגובה או אחת מהכותרות שמוזכרות בגורמים אפשריים.שגיאה ערך X-Apigee-fault-code protocol.http.ResponseWithBodyX-Apigee-fault-source target
NGINX
כדי לאבחן את השגיאה באמצעות יומני הגישה של NGINX:
- אם אתם משתמשי Private Cloud, אתם יכולים להשתמש ביומני הגישה של NGINX כדי לקבוע את פרטי המפתח לגבי HTTP
502 Bad Gateway. בודקים את יומני הגישה של NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logאיפה: הערכים ORG, ENV ו-PORT# מוחלפים בערכים בפועל.
- מחפשים שגיאות
502עם קוד השגיאהprotocol.http.ResponseWithBodyבמהלך פרק זמן מסוים (אם הבעיה התרחשה בעבר) או אם יש בקשות שעדיין נכשלות עם502. אם מופיעות שגיאות
502עם הערךprotocol.http.ResponseWithBodyשל X-Apigee-fault-code, צריך לקבוע את הערך של X-Apigee-fault-source.דוגמה לשגיאה 502 מיומן הגישה של NGINX:
בדוגמה שלמעלה מיומן הגישה של NGINX, הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source הם:
כותרות תגובה ערך X-Apigee-fault-code protocol.http.ResponseWithBodyX-Apigee-fault-source target- שימו לב שהערכים של X-Apigee-fault-code ו-X-Apigee-fault-source
הם
protocol.http.ResponseWithBodyו-targetבהתאמה. השגיאה הזו מציינת שהיא התרחשה כי שרת הקצה העורפי שלח קוד סטטוס204 No Contentאו205 Reset Contentעם גוף התגובה או אחת מהכותרות שמוזכרות בגורמים אפשריים.
הסיבה: גוף התגובה או הכותרות עם תגובה 204 משרת הקצה העורפי
אבחון
- כדי לקבוע את קוד השגיאה ואת מקור השגיאה של השגיאה שנצפתה, אפשר להשתמש בכלי 'מעקב אחר קריאות ל-API', בכלי 'מעקב' או ביומני הגישה של NGINX, כמו שמוסבר בשלבים הנפוצים לאבחון.
- אם קוד השגיאה הוא
protocol.http.ResponseWithBodyומקור השגיאה הואtarget, זה מצביע על כך שהשרת בקצה העורפי הגיב עם קוד סטטוס204 No Contentאו205 Reset Contentעם גוף התגובה או אחת מהכותרות שצוינו בסיבות אפשריות. כדי לוודא ששרת הקצה העורפי אכן שלח גוף של מטען ייעודי לתגובה או אחת או יותר מהכותרות שמוזכרות בסיבות אפשריות, אפשר לבצע את השלבים הבאים:
אם אתם משתמשים בענן ציבורי, ואם אתם יכולים לשלוח את אותה בקשת API לשרת הקצה העורפי ישירות מכל אחת מהמערכות שלכם.
- אם אתם משתמשי Private Cloud, אתם יכולים לשלוח את אותה בקשת API ישירות לשרת העורפי מאחד ממעבדי ההודעות שמשויכים לארגון ולסביבה הספציפיים שבהם נצפתה הכשל.
בודקים את התגובה שהתקבלה משרת הקצה העורפי ומוודאים שהיא מכילה גוף של מטען ייעודי לתגובה ו/או אחת או יותר מהכותרות שצוינו למעלה. אם כן, זו הסיבה לשגיאה הזו.
דוגמה 1
דוגמה 1: תגובת שרת בקצה העורפי 204 עם כותרת Content-Encoding
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Encoding: gzip< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveבדוגמה הזו, שרת הקצה העורפי הגיב עם קוד הסטטוס
204 No ContentועםContent-Encoding: gzipדוגמה מס' 2
דוגמה 2: תגובת שרת בקצה העורפי 204 עם כותרת Content-Length
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Length: 48< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveבדוגמה הזו, שרת הקצה העורפי הגיב עם קוד הסטטוס
204 No ContentועםContent-Length: 48דוגמה #3
דוגמה 3: תגובה של שרת קצה עורפי 205 עם גוף תגובה
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 205 Reset Content < Date: Sat, 31 Jul 2021 17:14:09 GMT < Content-Length: 12 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host X.X.X.X left intact
This is a sample Responseבדוגמה הזו, שרת הקצה העורפי הגיב עם קוד הסטטוס
205 Reset Contentוגוף התגובהThis is a sample Response..- בכל הדוגמאות שלמעלה, שרת הקצה העורפי שלח קוד סטטוס
204 No Contentאו205 Reset Contentעם גוף התגובה או עם אחת מהכותרות שמוזכרות בסיבות אפשריות. - לכן, Apigee Edge שלח קוד סטטוס
502 Bad Gatewayעם קוד השגיאהprotocol.http.ResponseWithBody.
רזולוציה
מוודאים שהשרת העורפי תמיד פועל בהתאם למפרט
RFC 7231, סעיף 6.3.6: 205 Reset Content, כששולחים את התגובה 204 No Content או 205 Reset Content אל Apigee Edge. כלומר, שרת הקצה העורפי אסור לשלוח את הפרטים הבאים כחלק מתגובת 204 No Content או 205 Reset Content:
- גוף המטען הייעודי (payload) של התשובה
- ואחד מהכותרים הבאים:
Content-LengthContent-EncodingTransfer-Encoding
מפרט
אם שרת הקצה העורפי שולח תגובה עם קוד סטטוס 204 No Content או 205 Reset Content, אבל לא עומד בדרישות של מפרטי ה-RFC הבאים, Apigee Edge מחזיר קוד סטטוס 502 Bad Gateway וקוד השגיאה protocol.http.ResponseWithBody:
| מפרט |
|---|
| RFC 7231, section 6.3.5: 204 No Content |
| RFC 7231, section 6.3.6: 205 Reset Content |
נקודות חשובות שכדאי לזכור
הפתרון המומלץ הוא לתקן את שרת הקצה העורפי כך שישלח את קוד הסטטוס 204 No Content
ו-205 Reset Content ללא גוף תגובה וללא אף אחד מהכותרות – Content-Length, Content-Encoding ו-Transfer-Encoding – ובהתאם למפרטים
RFC 7231, סעיף 6.3.5: 204 No Content ו-
RFC 7231, סעיף 6.3.6: 205 Reset Content.
אם עדיין דרושה לך עזרה מצוות התמיכה של Apigee, אפשר לעבור אל איסוף מידע לצורך אבחון.
צריך לאסוף פרטי אבחון
אוספים את נתוני האבחון הבאים ופונים אל התמיכה של Apigee Edge:
אם אתם משתמשי ענן ציבורי, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-proxy ל-API
- הפקודה
curlשבה השתמשת כדי לשחזר את השגיאה502 - קובץ מעקב לבקשות ה-API
אם אתם משתמשים ב-Private Cloud, עליכם לספק את הפרטים הבאים:
- הודעת השגיאה המלאה שזוהתה בבקשות שנכשלו
- שם הסביבה
- חבילת proxy ל-API
- קובץ מעקב לבקשות ה-API
יומני גישה של 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