כרגע מוצג התיעוד של 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 Monitoring > חקירה.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
- מוודאים שמסנן שרת ה-Proxy מוגדר לערך הכול.
- יש להציב את קוד השגיאה ביחס ל-Time.
צריך לבחור תא שמכיל את קוד השגיאה
protocol.http.UnsupportedEncoding
כפי שמוצג כאן:מידע על קוד התקלה
protocol.http.UnsupportedEncoding
מוצג באופן הבא:כדי להציג מידע נוסף, צריך ללחוץ על הצגת יומנים ולהרחיב את אחת הבקשות שנכשלו עם השגיאה
415
:- בחלון Logs, שימו לב לפרטים הבאים:
- מקור התקלה: מציין שהשגיאה הוחזרה על ידי
apigee
אוtarget
. - קוד תקלה: הוא צריך להיות תואם ל-
protocol.http.UnsupportedEncoding
.
- מקור התקלה: מציין שהשגיאה הוחזרה על ידי
- אם Fault Source הוא
apigee
, המשמעות היא שהבקשה הכילה קידוד לא נתמך בכותרתContent-Encoding
. - אם מקור ה-Fault הוא
target
, זה אומר שהתגובה של השרת העורפי הכילה קידוד לא נתמך בכותרתContent-Encoding
.
כלי המעקב
כדי לאבחן את השגיאה באמצעות כלי המעקב:
- מפעילים את
סשן המעקב ומבצעים אחת מהפעולות הבאות:
- להמתין עד שהשגיאה
415 Unsupported Media Type
תתרחש, או - אם אפשר לשחזר את הבעיה, יש לבצע את הקריאה ל-API כדי לשחזר את השגיאה
415 Unsupported Media Type
.
- להמתין עד שהשגיאה
יש לוודא שהאפשרות Show allflowInfos מופעלת:
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- אפשר לנווט בשלבים השונים של המעקב ולאתר את המיקום שבו אירעה הכשל.
השגיאה תוצג בדרך כלל ברצף אחרי השלב הבקשה שנשלחה לשרת היעד, כפי שמוצג כאן:
יש לשים לב לערך השגיאה מתוך המעקב.
המעקב לדוגמה שלמעלה מציג את השגיאה כ-
Unsupported Encoding "utf-8"
. מכיוון שהשגיאה הועלתה על ידי Apigee אחרי שהבקשה נשלחה לשרת הקצה העורפי, היא מציינת ששרת הקצה העורפי שלח את כותרת התגובהContent-Encoding
עם הערך"utf-8"
, שאינו קידוד נתמך ב-Apigee.- מנווטים לשלב AX (רישום נתונים ב-Analytics) במעקב ולוחצים עליו.
גוללים למטה לקטע Error / Response Headers בחלונית שלב הפרטים ומוצאים את הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source.
הערכים של X-Apigee-fault-code ושל X-Apigee-fault-source יופיעו כ-
protocol.http.UnsupportedEncoding
וגםtarget
. הערכים האלה מציינים שהשגיאה הזו נגרמת כי ערך הקידוד שאינו נתמך,"utf-8"
, הועבר על ידי שרת הקצה העורפי בכותרת התגובהContent-Encoding
.כותרות תגובה Value X-Apigee-fault-code protocol.http.UnsupportedEncoding
X-Apigee-fault-source target
- צריך לבדוק אם משתמשים ב
שרשור של שרת proxy. כלומר, אם נקודת הקצה של שרת היעד או של היעד מפעילה שרת proxy אחר ב-Apigee.
כדי לבדוק זאת, חוזרים לשלב הבקשה נשלחה לשרת היעד. לוחצים על Show Curl (הצגת כתובת ה-URL).
- החלון Curl for Request sent to Target שליחה נפתח, שבו אפשר לקבוע את הכינוי של שרת היעד כמארח.
- אם הכינוי של שרת היעד מפנה אל כינוי מארח וירטואלי, מדובר בשרשור של
שרת 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:
כותרות תגובה Value X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source MP
גם ה-X-Apigee-fault-source יכול לכלול אתX-Apigee-fault-source הערךX-Apigee-fault-source
הסיבה: הקידוד בבקשה לא נתמך
אבחון
- מאתרים את קוד ה-Fault ואת מקור התקלה של השגיאה שאותרה באמצעות יומני API Monitoring או יומני הגישה של NGINX, כמו שמוסבר ב שלבים נפוצים לאבחון.
- אם Fault Code (קוד תקלה) הוא
protocol.http.UnsupportedEncoding
ו-Fault Source (מקור השגיאה) מכילים את הערך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
- רק הקידוד הנתמך בתור הערך לכותרת
בדוגמה שלמעלה, המטען הייעודי של הבקשה כולל תוסף מסוג
gz
שמציין שהתוכן חייב להיותgzip
. כדי לפתור את הבעיה, אפשר לשלוח את כותרת הבקשה בתורContent-Encoding: gzip
ואת המטען הייעודי (payload) של הבקשה בפורמטgzip
:curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
הסיבה: קידוד לא נתמך בתשובה
אבחון
- מאתרים את קוד התקלה ואת מקור התקלה של השגיאה שנצפתה באמצעות מעקב API, כלי המעקב או יומני גישה של 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 באמצעות כללי המדיניות כמו RaiseFault או assignMessage.
הסיבה לכך היא שהשגיאה מתרחשת בשלב מוקדם במעבד ההודעות, לפני שניתן להוציא אותה לפועל.
- אם השגיאה
415
מוחזרת על ידי Apigee עקב קידוד לא נתמך שהועבר בכותרת התגובה מהשרת העורפי, צריך לתקן אותה בשרת הקצה העורפי כדי למנוע את השגיאה הזו. צריך לעבוד בתיאום עם צוות הקצה העורפי כדי לפתור את הבעיה.
אם אתם עדיין צריכים עזרה מהתמיכה של Apigee Edge, תוכלו לקרוא את נדרש איסוף פרטי אבחון.
צריך לאסוף פרטי אבחון
אם אתם עדיין זקוקים לעזרה מהתמיכה של Apigee, נסו את פרטי האבחון הבאים וצרו קשר עם התמיכה של Apigee Edge:
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם שרת proxy ל-API
- צריך להשלים את הפקודה
curl
שמשמשת לשחזור השגיאה415
- קובץ מעקב לבקשות 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