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 Monitoring > חקירה.
  4. בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
  5. מוודאים שמסנן שרת ה-Proxy מוגדר לערך הכול.
  6. יש להציב את קוד השגיאה ביחס ל-Time.
  7. צריך לבחור תא שמכיל את קוד השגיאה protocol.http.UnsupportedEncoding כפי שמוצג כאן:

    נבחר תא בקוד הטעות
  8. מידע על קוד התקלה protocol.http.UnsupportedEncoding מוצג באופן הבא:

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

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

כלי המעקב

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

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

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

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

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

  7. מנווטים לשלב AX (רישום נתונים ב-Analytics) במעקב ולוחצים עליו.
  8. גוללים למטה לקטע Error / Response Headers בחלונית שלב הפרטים ומוצאים את הערכים של 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.

    כותרות תגובה Value
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

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

    2. החלון Curl for Request sent to Target שליחה נפתח, שבו אפשר לקבוע את הכינוי של שרת היעד כמארח.
    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:

    כותרות תגובה 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

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

אבחון

  1. מאתרים את קוד ה-Fault ואת מקור התקלה של השגיאה שאותרה באמצעות יומני API Monitoring או יומני הגישה של NGINX, כמו שמוסבר ב שלבים נפוצים לאבחון.
  2. אם Fault Code (קוד תקלה) הוא protocol.http.UnsupportedEncoding ו-Fault Source (מקור השגיאה) מכילים את הערך 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. בדוגמה שלמעלה, המטען הייעודי של הבקשה כולל תוסף מסוג 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, כלי המעקב או יומני גישה של 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 באמצעות כללי המדיניות כמו 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