מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
תיאור הבעיה
אפליקציית הלקוח מקבלת קוד סטטוס HTTP של 415 Unsupported Media Type עם
קוד שגיאה protocol.http.UnsupportedEncoding כתגובה לקריאות ל-API.
הודעת שגיאה
אפליקציית הלקוח מקבלת את קוד התגובה הבא:
HTTP/1.1 415 Unsupported Media Type
בנוסף, יכול להיות שתופיע הודעת שגיאה שדומה להודעה שמוצגת בהמשך:
{
"fault":{
"faultstring":"Unsupported Encoding \"UTF-8\"",
"detail":{
"errorcode":"protocol.http.UnsupportedEncoding"
}
}
}גורמים אפשריים
השגיאה הזו מתקבלת אם ערך הכותרת Content-Encoding צוין ב-
בקשת ה-HTTP שהלקוח שלח אל Apigee או תגובת HTTP שנשלחה על ידי שרת הקצה העורפי אל
Apigee לא מכילה את
הקידוד נתמך על ידי Apigee, בהתאם למפרט
RFC 7231, סעיף 6.5.13: 415 סוג מדיה לא נתמך.
הסיבות האפשריות לשגיאה הזו הן:
| סיבה | תיאור | הוראות לפתרון בעיות עבור |
|---|---|---|
| הקידוד של הבקשה לא נתמך | כותרת הבקשה Content-Encoding מכילה קידוד שאינו נתמך
של Apigee Edge. |
משתמשי Edge בענן הציבורי והפרטי |
| קידוד לא נתמך בתגובה | כותרת התגובה Content-Encoding של שרת הקצה העורפי מכילה קידוד
לא נתמכת ב-Apigee Edge. |
משתמשי Edge בענן הציבורי והפרטי |
שלבי אבחון נפוצים
כדי לאבחן את השגיאה, אפשר להשתמש בכל אחת מהשיטות הבאות:
מעקב API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- נכנסים לחשבון Apigee Edge.
עוברים לארגון שבו רוצים לחקור את הבעיה:
- מנווטים אל ניתוח > מעקב API > לחקור את הדף.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
- מוודאים שהמסנן של שרת ה-proxy מוגדר לאפשרות All.
- הציגו את קוד התקלה ביחס ל-Time.
צריך לבחור תא עם קוד השגיאה
protocol.http.UnsupportedEncoding, כמו בדוגמה הבאה:
מידע על קוד התקלה
protocol.http.UnsupportedEncodingמוצג כך:
לוחצים על הצגת היומנים ומרחיבים את אחת מהבקשות שנכשלו באמצעות
415. שגיאה כדי להציג מידע נוסף:
- בחלון יומנים שימו לב לפרטים הבאים:
- מקור התקלה: בעמודה הזו מוצג שהשגיאה הוחזרה על ידי
apigeeאוtarget. - קוד התקלה: הקוד צריך להתאים ל-
protocol.http.UnsupportedEncoding.
- מקור התקלה: בעמודה הזו מוצג שהשגיאה הוחזרה על ידי
- אם מקור התקלה הוא
apigee, זה אומר שהבקשה הכיל קידוד לא נתמך בכותרתContent-Encoding. - אם מקור התקלה הוא
target, זה אומר שהשרת העורפי התגובה הכילה קידוד לא נתמך בכותרתContent-Encoding.
כלי המעקב
כדי לאבחן את השגיאה באמצעות כלי המעקב:
- מפעילים את
פעילות מעקב וגם:
- צריך להמתין עד שהשגיאה
415 Unsupported Media Typeתתרחש, או - אם הצלחתם לשחזר את הבעיה, צריך לבצע את הקריאה ל-API כדי לשחזר
שגיאה אחת (
415 Unsupported Media Type).
- צריך להמתין עד שהשגיאה
יש לוודא שהאפשרות Show all FlowInfos מופעלת:
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- צריך לעבור בין השלבים השונים במעקב ולאתר את מקום הכשל.
השגיאה בדרך כלל תופיע בתהליך אחרי הבקשה שנשלחה ליעד שרת כפי שמוצג בהמשך:
בודקים את ערך השגיאה במעקב.
במעקב הדוגמה שלמעלה מוצגת השגיאה כ-
Unsupported Encoding "utf-8". מאז כש-Apigee מעלה את השגיאה אחרי שהבקשה נשלחה לשרת העורפי, היא מציינת ששרת הקצה העורפי שלח את כותרת התגובהContent-Encodingעם הערך של"utf-8", וזו לא קידוד נתמך ב-Apigee.- מנווטים לשלב AX (נתוני Analytics מתועדים) במעקב ולוחצים עליו.
גוללים למטה לקטע כותרות שגיאה / תגובה בפרטי השלב. חלונית וקביעת הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source:
הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source יופיעו בתור
protocol.http.UnsupportedEncodingו-target, כדי לציין אירעה שגיאה כי ערך הקידוד הלא נתמך של"utf-8"הועבר על ידי שרת עורפי בכותרת התגובהContent-Encoding.כותרות של תשובות ערך X-Apigee-fault-code protocol.http.UnsupportedEncodingX-Apigee-fault-source target- בדוק אם השתמשת ב-
שרשרת של שרתי proxy; כלומר, אם שרת היעד/נקודת הקצה (endpoint) של היעד מפעיל טווח אחר
שרת proxy ב-Apigee.
כדי לבדוק זאת, חוזרים לשלב הבקשה נשלחה לשרת היעד. לוחצים על Show Curl (הצגת Curl).
- החלון Curl for Request Sent to target Server (מספר בקשה שנשלחה לשרת היעד) נפתח שממנו אפשר לקבוע את הכינוי של שרת היעד.
- אם הכינוי של המארח של שרת היעד מפנה אל כינוי מארח וירטואלי, מדובר בשרת proxy
יצירת שרשרת. במקרה כזה, צריך לחזור על כל השלבים שלמעלה עבור שרת ה-Proxy המשורשר עד
לברר מה הגורם בפועל לשגיאה
415 Unsupported Media Type. - אם הכינוי של מארח שרת היעד מפנה לשרת הקצה העורפי שלכם, אז זה אומר שרת הקצה העורפי שלכם מעביר את הקידוד שלא נתמך אל Apigee.
יומני גישה ל-Nginix
כדי לאבחן את השגיאה באמצעות יומני הגישה של NGINX:
- אם אתם משתמשים של ענן פרטי, אתם יכולים להשתמש ביומני הגישה ל-NGINX כדי להבין
את המידע העיקרי על שגיאות HTTP
415. בודקים את יומני הגישה ל-NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- חיפוש שגיאות
415במהלך פרק זמן מסוים (אם הבעיה אירעה בעבר) או אם יש בקשות שעדיין נכשלות עם415. אם מופיעות שגיאות
415עם התאמה של X-Apigee-fault-code את הערך שלprotocol.http.UnsupportedEncoding, ואז קובעים את הערך של X-Apigee-fault-source.שגיאה 415 ביומן הגישה ל-NGINX:
הרשומה לדוגמה שלמעלה מיומן הגישה ל-NGINX כוללת את הערכים הבאים עבור X- Apigee-fault-code ו-X-Apigee-fault-source:
כותרות של תשובות ערך X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source MPגם ה-X-Apigee-fault-source יכול לקבל גם אתX-Apigee-fault-source הערךX-Apigee-fault-source
הסיבה: הקידוד בבקשה לא נתמך
אבחון
- מגדירים את קוד השגיאה ואת מקור התקלה של השגיאה שזוהתה באמצעות ה-API מעקב אחרי יומני גישה ל-NGINX או מעקב אחריהם, כפי שמוסבר ב שלבי האבחון הנפוצים.
- אם קוד התקלה הוא
protocol.http.UnsupportedEncodingוהתקלה המקור מכיל את הערךapigeeאוMP, אז זה מציין הבקשה שנשלחה על ידי אפליקציית הלקוח מכילה קידוד לא נתמך בכותרת הבקשה.Content-Encoding. - אפשר לקבוע את הערך של קידוד לא נתמך שהועבר כחלק מבקשת ה-HTTP
באחת מהשיטות הבאות:
הודעת שגיאה
באמצעות הודעת השגיאה:אם יש לכם גישה להודעת השגיאה המלאה שהתקבלה מ-Apigee Edge, עליכם לעיין אל
faultstring. השדהfaultstringמכיל את הערך של הפונקציה שאינה נתמכת עם הקוד.הודעת שגיאה לדוגמה:
"faultstring":"Unsupported Encoding \"UTF-8\""
בהודעת השגיאה שלמעלה, שימו לב שהערך של קידוד שאינו נתמך הוא
“UTF-8”כפי שנראה בfaultstring.מכיוון שהקידוד
“UTF-8”לא נתמך ב-Apigee Edge, הבקשה הזו נכשל עם השגיאה415 Unsupported Media Typeעם קוד השגיאה:protocol.http.UnsupportedEncoding.
הבקשה בפועל
באמצעות הבקשה בפועל:- אם אין לכם גישה לבקשה שנשלחה בפועל על ידי אפליקציית הלקוח, עוברים אל רזולוציה.
- אם יש לכם גישה לבקשה שנשלחה בפועל על ידי אפליקציית הלקוח, בצעו את
את השלבים הבאים:
- קביעת הערך שמועבר לכותרת הבקשה
Content-Encoding. - אם הערך שהועבר לכותרת הבקשה
Content-Encodingאינו ערך אחד מבין הערכים המפורטים בקידוד נתמך, כלומר את הסיבה לשגיאה.בקשה לדוגמה:
curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: UTF-8" -X POST -d @request_payload.gz
הבקשה לדוגמה שלמעלה שולחת את הערך
"UTF-8"לכותרתContent- Encoding, שאינה הקידוד נתמך ב-Apigee Edge. לכן, הבקשה הזו נכשלת עם שגיאת415 Unsupported Media Typeעם קוד השגיאה:protocol.http.UnsupportedEncoding.
- קביעת הערך שמועבר לכותרת הבקשה
רזולוציה
- ראו את רשימת הקידוד שנתמכת על ידי Apigee ב- קידוד נתמך.
- צריך לוודא שאפליקציית הלקוח תמיד שולחת את הפרטים הבאים:
- רק הקידוד הנתמך כערך של הכותרת
Content-Encodingב: הבקשה - המטען הייעודי (payload) של הבקשה בפורמט הנתמך ל-Apigee Edge ותואם לפורמט
צוין בכותרת
Content-Encoding
- רק הקידוד הנתמך כערך של הכותרת
בדוגמה שלמעלה, למטען הייעודי (Payload) של הבקשה יש תוסף
gzשמציין שהתוכן חייב להיותgzip. כדי לפתור את הבעיה, אפשר לשלוח את כותרת הבקשה בתורContent-Encoding: gzip, והמטען הייעודי (payload) של הבקשה בפורמטgzip:curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
הסיבה: קידוד לא נתמך בתגובה
אבחון
- מגדירים את קוד השגיאה ואת מקור התקלה של השגיאה שזוהתה באמצעות ה-API יומני גישה ל-Monitoring, ל-Trace Tool או ל-NGINX, כפי שמוסבר ב שלבי האבחון הנפוצים.
- אם ל-Fault Source יש את הערך
target, זה מציין תגובה שנשלחת משרת הקצה העורפי מכילה קידוד לא נתמך כותרתContent-Encoding. - ניתן לקבוע את הערך של קידוד לא נתמך שהועבר כחלק מתגובת ה-HTTP מ-
שרת העורפי באמצעות אחת מהשיטות הבאות:
הודעת שגיאה
באמצעות הודעת השגיאה:אם יש לכם גישה להודעת השגיאה המלאה שהתקבלה מ-Apigee Edge, יש לעיין ב
faultstring. השדהfaultstringמכיל את הערך של אין תמיכה בקידוד.הודעת שגיאה לדוגמה:
"faultstring":"Unsupported Encoding \"UTF-8\""
-
בהודעת השגיאה שלמעלה, שימו לב שהערך של קידוד שאינו נתמך הוא
“UTF-8”כפי שנראה בfaultstring.מכיוון ש-
“UTF-8”לא נתמך ב-Apigee Edge, הבקשה נכשלה עם השגיאה415 Unsupported Media Typeעם קוד השגיאה:protocol.http.UnsupportedEncoding.
כלי המעקב
באמצעות Trace:
רזולוציה
- ראו את רשימת הקידוד שנתמכת על ידי Apigee ב- קידוד נתמך
- ודאו שהשרת העורפי תמיד שולח את הפרטים הבאים:
- רק הקידוד הנתמך כערך של
הכותרת
Content-Encodingבבקשה - המטען הייעודי (payload) של התגובה בפורמט הנתמך ל-Apigee Edge ותואם לפורמט
צוין בכותרת
Content-Encoding
- רק הקידוד הנתמך כערך של
הכותרת
הקידוד נתמך
בטבלה הבאה מפורטים פורמט הקידוד שנתמך ב-Apigee Edge:
| שם | קידוד | תיאור |
|---|---|---|
Content-Encoding |
gzip |
פורמט Unix gzip |
deflate |
בפורמט הזה נעשה שימוש במבנה zlib עם אלגוריתם לדחיסת נתונים. |
מפרט
Apigee מגיבה עם תגובת השגיאה 415 Unsupported Media Type בהתאם
מפרט RFC הבא:
| מפרט |
|---|
| RFC 7231, סעיף 6.5.13: 415 סוג מדיה לא נתמך |
נקודות עיקריות שכדאי לשים לב אליהן
שימו לב לנקודות הבאות:
- אם השגיאה
415מוחזרת על ידי Apigee בגלל קידוד לא נתמך שהועבר הכותרתContent-Encodingכחלק מבקשת ה-API, ואז:- לא תוכלו לתעד את המעקב אחרי בקשות כאלה.
-
לא ניתן לשנות את הפורמט או את התוכן של תגובת השגיאה שנשלחת על ידי Apigee Edge באמצעות כללי המדיניות כמו IncreaseFault ו-AssignMessage.
הסיבה לכך היא שהשגיאה הזאת מתרחשת בשלב מוקדם במעבד ההודעות לפני .
- אם השגיאה
415מוחזרת על ידי Apigee בגלל מעבר קידוד לא נתמך בכותרת התגובה משרת הקצה העורפי, אז צריך לתקן את זה שרת הקצה העורפי כדי להימנע מהשגיאה הזו. יש לעבוד עם צוות הקצה העורפי בהתאם לצורך כדי לפתור את הבעיה.
אם אתם עדיין צריכים עזרה מהתמיכה של Apigee Edge, עוברים אל נדרש איסוף של פרטי אבחון.
חובה לאסוף פרטי אבחון
אם עדיין דרושה לך עזרה מהתמיכה של Apigee, כדאי לאסוף את הפרטים הבאים את פרטי האבחון ולאחר מכן פונים לתמיכה של Apigee Edge:
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-API של ה-Proxy
- צריך להשלים את הפקודה
curlששימשה לשחזור השגיאה415 - קובץ מעקב אחר בקשות ה-API
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- הודעת שגיאה מלאה שנצפתה בבקשות שנכשלו
- שם הסביבה
- חבילת API Proxy
- קובץ מעקב אחר בקשות ה-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