כרגע מוצג התיעוד של 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 משרת הקצה העורפי ל-Apigee Edge היא 204 No Content
או 205 Reset Content
, אבל היא מכילה את גוף התגובה ו/או אחת או יותר מהכותרות הבאות:
Content-Length
Content-Encoding
Transfer-Encoding
בהתאם למפרט
RFC 7231, סעיף 6.3.5: 204 אין תוכן ו-
RFC 7231, סעיף 6.3.6: 205 איפוס תוכן, סביר להניח שלא יישלח תוכן נוסף
כחלק מגוף המטען הייעודי (payload) של התגובה עם קוד הסטטוס 204 No
Content
או 205 Reset Content
על ידי שרת המקור. כותרות התגובות כמו Content-Length
, Content-Encoding
או Transfer-Encoding
מציינות את הגודל, הסוג או הפורמט של המטען הייעודי (payload) של התגובה.
לכן, Apigee Edge מחזיר ללקוח את קוד הסטטוס 502 Bad Gateway
עם
קוד השגיאה protocol.http.ResponseWithBody
בנסיבות
הבאות:
קוד הסטטוס משרת הקצה העורפי | ||
---|---|---|
התשובה משרת הקצה העורפי מכילה | 204 ללא תוכן | 205 איפוס תוכן |
גוף התגובה | שגיאה | שגיאה |
כותרת אחת ( (מוגדר לערך שאינו אפס) |
שגיאה | שגיאה |
(מוגדר כ- קידוד נתמך ב-Apigee Edge) |
שגיאה | אין שגיאות |
Transfer-Encoding |
שגיאה | שגיאה |
אלה הסיבות האפשריות לשגיאה הזו:
סיבה | תיאור | ההוראות לפתרון בעיות הרלוונטיות עבור |
---|---|---|
גוף התגובה או כותרות עם תגובת 204 משרת קצה עורפי | השרת העורפי שולח תגובה 204 No Content או 205 Reset Content עם גוף תגובה ו/או אחת או יותר מהכותרות Content-Type , Content-Encoding או Transfer-Encoding . |
משתמשי Edge הציבוריים והפרטיים |
שלבים נפוצים באבחון
אפשר להשתמש באחד מהכלים/הטכניקות הבאים כדי לאבחן את השגיאה הזו:
מעקב באמצעות API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- נכנסים לממשק המשתמש של Apigee Edge בתור משתמשים עם תפקיד מתאים.
עוברים לארגון שבו רוצים לבדוק את הבעיה.
- עוברים לדף ניתוח > API Monitoring > חקירה.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
- יש להציב את קוד השגיאה ביחס ל-Time.
צריך לבחור תא שמכיל את קוד השגיאה
protocol.http.ResponseWithBody
כפי שמוצג כאן:המידע על קוד התקלה
protocol.http.ResponseWithBody
יופיע כפי שמוצג כאן:לוחצים על View Logs (הצגת היומנים) ומרחיבים את השורה של הבקשה שנכשלה.
- בחלון Logs, שימו לב לפרטים הבאים:
- קוד סטטוס:
502
- מקור התקלה:
target
- קוד תקלה:
protocol.http.ResponseWithBody
.
- קוד סטטוס:
- אם ל-Fault Source יש את הערך
target
ול-Fault Code יש את הערךprotocol.http.ResponseWithBody
, זה אומר שהשגיאה אירעה כי השרת העורפי שלח קוד סטטוס204 No Content
או205 Reset Content
עם גוף התגובה ו/או אחת מהכותרות שהוזכרו בקטע סיבות אפשריות.
כלי המעקב
כדי לאבחן את השגיאה באמצעות כלי המעקב:
- מפעילים את הפעלת המעקב
וגם:
- צריך להמתין עד שהשגיאה
502 Bad Gateway
תתרחש, או - אם אפשר לשחזר את הבעיה, יש לבצע את הקריאה ל-API ולשחזר את השגיאה
502 Bad Gateway
.
- צריך להמתין עד שהשגיאה
יש לוודא שהאפשרות Show allflowInfos מופעלת:
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- אפשר לנווט בין השלבים השונים של המעקב ולאתר את המיקום שבו אירעה הכשל.
השגיאה תופיע בדרך כלל בשגיאה
flowinfo
מיד אחרי השלב הבקשה נשלחה לשרת היעד, כפי שמוצג כאן:תרחיש מס' 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
עם גוף התגובה ו/או אחת מהכותרות שצוינו בסיבות אפשריות.שגיאה Value X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
NGINX
כדי לאבחן את השגיאה באמצעות יומני הגישה של NGINX:
- אם אתם משתמשים בענן פרטי, אתם יכולים להשתמש ביומני הגישה של 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
כאשר X-Apigee-fault-code תואם לערךprotocol.http.ResponseWithBody
, צריך לקבוע את הערך של X-Apigee-fault-source.שגיאה 502 לדוגמה ביומן הגישה של NGINX:
הרשומה לדוגמה שלמעלה מיומן הגישה של NGINX כוללת את הערכים הבאים עבור X- Apigee-fault-code ו-X-Apigee-fault-source:
כותרות תגובה Value X-Apigee-fault-code protocol.http.ResponseWithBody
X-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, כמו שמוסבר במאמר שלבי האבחון הנפוצים.
- אם Fault Code הוא
protocol.http.ResponseWithBody
ו-FaultSource יש את הערךtarget
, זה אומר שהשרת העורפי הגיב עם קוד סטטוס204 No Content
או205 Reset Content
עם גוף התגובה ו/או אחת מהכותרות שמופיעות בסיבות אפשריות. כדי לבדוק אם שרת הקצה העורפי אכן שלח גוף מטען ייעודי (payload) של תגובה ו/או אחת או יותר מהכותרות שצוינו בקטע סיבות אפשריות, אפשר לבצע את השלבים הבאים:
אם אתם משתמשים ב-Public Cloud, ואם אתם יכולים לשלוח את אותה בקשת API לשרת הקצה העורפי ישירות מאחת מהמערכות שלכם.
- משתמשים בענן פרטי יכולים לשלוח את אותה בקשת API לשרת הקצה העורפי ישירות מאחד ממעבדי ההודעות שמשויכים לארגון ולסביבה הספציפיים שבהם הכשל נצפה.
צריך לבדוק את התגובה שהתקבלה משרת הקצה העורפי ולוודא שהיא מכילה גוף מטען ייעודי (payload) של תגובה ו/או אחת או יותר מהכותרות שצוינו למעלה. אם כן, זו הסיבה לשגיאה.
דוגמה מס' 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
דוגמה שנייה: תגובה 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
.
רזולוציה
כאשר שולחים את התגובה 204 No Content
או 205 Reset Content
ל-Apigee Edge, חשוב לוודא ששרת הקצה העורפי תמיד פועל בהתאם למפרט
RFC 7231, סעיף 6.3.6: 205 איפוס תוכן. כלומר, אסור לשלוח לשרת הקצה העורפי את הפריטים הבאים כחלק מתגובת 204 No Content
או 205 Reset Content
:
- גוף המטען הייעודי (payload) של התגובה
- כל אחת מהכותרות הבאות:
Content-Length
Content-Encoding
Transfer-Encoding
מפרט
Apigee Edge מגיב עם קוד הסטטוס 502 Bad Gateway
וקוד השגיאה protocol.http.ResponseWithBody
אם שרת הקצה העורפי שולח תגובה 204 No Content
או 205 Reset Content
אבל לא פועל בהתאם למפרטי RFC הבאים:
מפרט |
---|
RFC 7231, סעיף 6.3.5: 204 ללא תוכן |
RFC 7231, סעיף 6.3.6: 205 איפוס תוכן |
נקודות עיקריות שכדאי לשים לב אליהן
הפתרון המומלץ הוא לתקן את שרת הקצה העורפי כך שישלח את קוד המצב 204 No Content
ו-205 Reset Content
ללא גוף התגובה וכל אחת מהכותרות - Content-Length
, Content-Encoding
ו-Transfer-Encoding
, כך שיפעל בהתאם למפרטים
RFC 7231, סעיף 6.3.5: 204 ללא תוכן
ו-
RFC 7231, סעיף 6.3.6: 205 איפוס תוכן.
אם אתם עדיין זקוקים לעזרה מהתמיכה של Apigee, תוכלו לקרוא את המאמר נדרש איסוף פרטי אבחון.
צריך לאסוף פרטי אבחון
יש לאסוף את פרטי האבחון הבאים ולאחר מכן לפנות לתמיכה של Apigee Edge:
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם שרת proxy ל-API
- צריך להשלים את הפקודה
curl
שמשמשת לשחזור השגיאה502
- קובץ מעקב לבקשות API
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- זוהתה הודעת שגיאה מלאה בבקשות שנכשלו
- שם הסביבה
- חבילת שרת 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