415 סוג מדיה לא נתמך - קידוד לא נתמך

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

  1. נכנסים לחשבון Apigee Edge.
  2. עוברים לארגון שבו רוצים לחקור את הבעיה:

    תפריט נפתח של ארגון ממשק משתמש
  3. מנווטים אל ניתוח > מעקב API > לחקור את הדף.
  4. בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
  5. מוודאים שהמסנן של שרת ה-proxy מוגדר לאפשרות All.
  6. הציגו את קוד התקלה ביחס ל-Time.
  7. צריך לבחור תא עם קוד השגיאה protocol.http.UnsupportedEncoding, כמו בדוגמה הבאה:

    נבחר תא של קוד שגיאה
  8. מידע על קוד התקלה protocol.http.UnsupportedEncoding מוצג כך:

  9. לוחצים על הצגת היומנים ומרחיבים את אחת מהבקשות שנכשלו באמצעות 415. שגיאה כדי להציג מידע נוסף:

  10. בחלון יומנים שימו לב לפרטים הבאים:
    • מקור התקלה: בעמודה הזו מוצג שהשגיאה הוחזרה על ידי apigee או target.
    • קוד התקלה: הקוד צריך להתאים ל-protocol.http.UnsupportedEncoding.
  11. אם מקור התקלה הוא apigee, זה אומר שהבקשה הכיל קידוד לא נתמך בכותרת Content-Encoding.
  12. אם מקור התקלה הוא target, זה אומר שהשרת העורפי התגובה הכילה קידוד לא נתמך בכותרת Content-Encoding.

כלי המעקב

כדי לאבחן את השגיאה באמצעות כלי המעקב:

  1. מפעילים את פעילות מעקב וגם:
    • צריך להמתין עד שהשגיאה 415 Unsupported Media Type תתרחש, או
    • אם הצלחתם לשחזר את הבעיה, צריך לבצע את הקריאה ל-API כדי לשחזר שגיאה אחת (415 Unsupported Media Type).
  2. יש לוודא שהאפשרות Show all FlowInfos מופעלת:

    הצגת חלונית האפשרויות, הצגת כל פרטי הזרימה
  3. בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
  4. צריך לעבור בין השלבים השונים במעקב ולאתר את מקום הכשל.
  5. השגיאה בדרך כלל תופיע בתהליך אחרי הבקשה שנשלחה ליעד שרת כפי שמוצג בהמשך:

  6. בודקים את ערך השגיאה במעקב.

    במעקב הדוגמה שלמעלה מוצגת השגיאה כ-Unsupported Encoding "utf-8". מאז כש-Apigee מעלה את השגיאה אחרי שהבקשה נשלחה לשרת העורפי, היא מציינת ששרת הקצה העורפי שלח את כותרת התגובה Content-Encoding עם הערך של "utf-8", וזו לא קידוד נתמך ב-Apigee.

  7. מנווטים לשלב AX (נתוני Analytics מתועדים) במעקב ולוחצים עליו.
  8. גוללים למטה לקטע כותרות שגיאה / תגובה בפרטי השלב. חלונית וקביעת הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source:

  9. הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source יופיעו בתור protocol.http.UnsupportedEncoding ו-target, כדי לציין אירעה שגיאה כי ערך הקידוד הלא נתמך של "utf-8" הועבר על ידי שרת עורפי בכותרת התגובה Content-Encoding.

    כותרות של תשובות ערך
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

  10. בדוק אם השתמשת ב- שרשרת של שרתי proxy; כלומר, אם שרת היעד/נקודת הקצה (endpoint) של היעד מפעיל טווח אחר שרת proxy ב-Apigee.
    1. כדי לבדוק זאת, חוזרים לשלב הבקשה נשלחה לשרת היעד. לוחצים על Show Curl (הצגת Curl).

    2. החלון Curl for Request Sent to target Server (מספר בקשה שנשלחה לשרת היעד) נפתח שממנו אפשר לקבוע את הכינוי של שרת היעד.
    3. אם הכינוי של המארח של שרת היעד מפנה אל כינוי מארח וירטואלי, מדובר בשרת proxy יצירת שרשרת. במקרה כזה, צריך לחזור על כל השלבים שלמעלה עבור שרת ה-Proxy המשורשר עד לברר מה הגורם בפועל לשגיאה 415 Unsupported Media Type.
    4. אם הכינוי של מארח שרת היעד מפנה לשרת הקצה העורפי שלכם, אז זה אומר שרת הקצה העורפי שלכם מעביר את הקידוד שלא נתמך אל Apigee.

יומני גישה ל-Nginix

כדי לאבחן את השגיאה באמצעות יומני הגישה של NGINX:

  1. אם אתם משתמשים של ענן פרטי, אתם יכולים להשתמש ביומני הגישה ל-NGINX כדי להבין את המידע העיקרי על שגיאות HTTP 415.
  2. בודקים את יומני הגישה ל-NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. חיפוש שגיאות 415 במהלך פרק זמן מסוים (אם הבעיה אירעה בעבר) או אם יש בקשות שעדיין נכשלות עם 415.
  4. אם מופיעות שגיאות 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.Response405WithoutAllowHeader
    X-Apigee-fault-source MP

    גם ה-X-Apigee-fault-source יכול לקבל גם אתX-Apigee-fault-source הערךX-Apigee-fault-source

הסיבה: הקידוד בבקשה לא נתמך

אבחון

  1. מגדירים את קוד השגיאה ואת מקור התקלה של השגיאה שזוהתה באמצעות ה-API מעקב אחרי יומני גישה ל-NGINX או מעקב אחריהם, כפי שמוסבר ב שלבי האבחון הנפוצים.
  2. אם קוד התקלה הוא protocol.http.UnsupportedEncoding והתקלה המקור מכיל את הערך apigee או MP, אז זה מציין הבקשה שנשלחה על ידי אפליקציית הלקוח מכילה קידוד לא נתמך בכותרת הבקשה. Content-Encoding.
  3. אפשר לקבוע את הערך של קידוד לא נתמך שהועבר כחלק מבקשת ה-HTTP באחת מהשיטות הבאות:

    הודעת שגיאה

    באמצעות הודעת השגיאה:
    1. אם יש לכם גישה להודעת השגיאה המלאה שהתקבלה מ-Apigee Edge, עליכם לעיין אל faultstring. השדה faultstring מכיל את הערך של הפונקציה שאינה נתמכת עם הקוד.

      הודעת שגיאה לדוגמה:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. בהודעת השגיאה שלמעלה, שימו לב שהערך של קידוד שאינו נתמך הוא “UTF-8” כפי שנראה בfaultstring.

      מכיוון שהקידוד “UTF-8” לא נתמך ב-Apigee Edge, הבקשה הזו נכשל עם השגיאה 415 Unsupported Media Type עם קוד השגיאה: protocol.http.UnsupportedEncoding.

    הבקשה בפועל

    באמצעות הבקשה בפועל:
    1. אם אין לכם גישה לבקשה שנשלחה בפועל על ידי אפליקציית הלקוח, עוברים אל רזולוציה.
    2. אם יש לכם גישה לבקשה שנשלחה בפועל על ידי אפליקציית הלקוח, בצעו את את השלבים הבאים:
      1. קביעת הערך שמועבר לכותרת הבקשה Content-Encoding.
      2. אם הערך שהועבר לכותרת הבקשה 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.

רזולוציה

  1. ראו את רשימת הקידוד שנתמכת על ידי Apigee ב- קידוד נתמך.
  2. צריך לוודא שאפליקציית הלקוח תמיד שולחת את הפרטים הבאים:
    • רק הקידוד הנתמך כערך של הכותרת Content-Encoding ב: הבקשה
    • המטען הייעודי (payload) של הבקשה בפורמט הנתמך ל-Apigee Edge ותואם לפורמט צוין בכותרת Content-Encoding
  3. בדוגמה שלמעלה, למטען הייעודי (Payload) של הבקשה יש תוסף gz שמציין שהתוכן חייב להיות gzip. כדי לפתור את הבעיה, אפשר לשלוח את כותרת הבקשה בתור Content-Encoding: gzip, והמטען הייעודי (payload) של הבקשה בפורמט gzip:

    curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
    

הסיבה: קידוד לא נתמך בתגובה

אבחון

  1. מגדירים את קוד השגיאה ואת מקור התקלה של השגיאה שזוהתה באמצעות ה-API יומני גישה ל-Monitoring, ל-Trace Tool או ל-NGINX, כפי שמוסבר ב שלבי האבחון הנפוצים.
  2. אם ל-Fault Source יש את הערך target, זה מציין תגובה שנשלחת משרת הקצה העורפי מכילה קידוד לא נתמך כותרת Content-Encoding.
  3. ניתן לקבוע את הערך של קידוד לא נתמך שהועבר כחלק מתגובת ה-HTTP מ- שרת העורפי באמצעות אחת מהשיטות הבאות:

    הודעת שגיאה

    באמצעות הודעת השגיאה:
    1. אם יש לכם גישה להודעת השגיאה המלאה שהתקבלה מ-Apigee Edge, יש לעיין בfaultstring. השדה faultstring מכיל את הערך של אין תמיכה בקידוד.

      הודעת שגיאה לדוגמה:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. בהודעת השגיאה שלמעלה, שימו לב שהערך של קידוד שאינו נתמך הוא “UTF-8” כפי שנראה בfaultstring.

      מכיוון ש-“UTF-8” לא נתמך ב-Apigee Edge, הבקשה נכשלה עם השגיאה 415 Unsupported Media Type עם קוד השגיאה: protocol.http.UnsupportedEncoding.

    כלי המעקב

    באמצעות Trace:
    1. אם אין לכם מעקב אחר הבקשה שנכשלה, עוברים אל רזולוציה.
    2. אם תיעדתם מעקב אחר הכשל, תוכלו לקבוע הקידוד שמועבר על ידי שרת הקצה העורפי כחלק מהתשובה Content-Encoding כמו שמוסבר בכלי המעקב.

רזולוציה

  1. ראו את רשימת הקידוד שנתמכת על ידי Apigee ב- קידוד נתמך
  2. ודאו שהשרת העורפי תמיד שולח את הפרטים הבאים:
    • רק הקידוד הנתמך כערך של הכותרת 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