415 نوع الوسائط غير متوافق - الترميز غير متوافق

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

المشكلة

يحصل تطبيق العميل على رمز حالة HTTP 415 Unsupported Media Type مع رمز الخطأ protocol.http.UnsupportedEncoding كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.

رسالة الخطأ

يتلقى تطبيق العميل رمز الاستجابة التالي:

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 العام والخاص على السحابة الإلكترونية

خطوات التشخيص الشائعة

لتشخيص الخطأ، يمكنك استخدام أي من الطرق التالية:

مراقبة واجهة برمجة التطبيقات

لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:

  1. سجِّل الدخول إلى حسابك على Apigee Edge.
  2. انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها:

    القائمة المنسدلة لمؤسسة واجهة المستخدم
  3. انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
  4. اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
  5. تأكّد من ضبط فلتر الخادم الوكيل على الكل.
  6. ارسم رمز الخطأ مقابل الوقت.
  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، أو
    • إذا كان بإمكانك إعادة إظهار المشكلة، عليك إجراء طلب بيانات من واجهة برمجة التطبيقات لإعادة إظهار الخطأ 415 Unsupported Media Type.
  2. تأكد من تمكين عرض كل FlowInfo:

    جزء "عرض الخيارات"، إظهار جميع معلومات التدفق
  3. اختَر أحد الطلبات التي تعذّر تنفيذها وافحص بيانات التتبّع.
  4. تنقَّل عبر المراحل المختلفة من عملية التتبُّع وحدِّد مكان حدوث الفشل.
  5. ستجد الخطأ عادةً في عملية تدفق بعد مرحلة تم إرسال الطلب إلى الخادم المستهدف كما هو موضّح أدناه:

  6. دوِّن قيمة الخطأ في عملية التتبّع.

    يعرض تقرير تتبُّع النموذج أعلاه الخطأ على أنّه Unsupported Encoding "utf-8". بما أنّ الخطأ المرسَل من قِبل Apigee بعد إرسال الطلب إلى خادم الخلفية، يعني ذلك أنّ خادم الخلفية أرسل عنوان الاستجابة Content-Encoding مع القيمة "utf-8"، وهي ليست ترميزًا متوافقًا في Apigee.

  7. انتقِل إلى مرحلة AX (بيانات "إحصاءات Google" المسجّلة) في التتبُّع وانقر عليها.
  8. انتقِل للأسفل إلى قسم Error / Response Headers (عناوين الأخطاء/الاستجابة) في لوحة Stage Details (تفاصيل المرحلة) وحدِّد قيمتَي X-Apigee-error-code وX-Apigee- error-source كما هو موضّح أدناه:

  9. ستظهر قيمتَي X-Apigee-fault-code وX-Apigee-fault-code بالرمز protocol.http.UnsupportedEncoding وtarget، ما يشير إلى أنّ هذا الخطأ حدث بسبب تمرير قيمة الترميز غير المتوافقة لـ "utf-8" من خلال خادم الخلفية في عنوان الاستجابة Content-Encoding.

    عناوين الاستجابة القيمة
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

  10. تحقَّق ممّا إذا كنت تستخدم تسلسل الخادم الوكيل، أي ما إذا كانت نقطة النهاية المستهدَفة/الخادم الهدف تستدعي خادمًا وكيلاً آخر في Apigee.
    1. لتحديد ذلك، انتقِل مرة أخرى إلى مرحلة تم إرسال الطلب إلى الخادم الهدف. انقر على Show Curl (إظهار عنوان URL).

    2. ستفتح نافذة تجانس طلب تم الإرسال إلى الخادم الهدف والتي يمكنك من خلالها تحديد الاسم المستعار لمضيف الخادم الهدف.
    3. إذا كان الاسم المستعار لمضيف الخادم الهدف يشير إلى اسم مستعار لمضيف افتراضي، يكون ذلك في هذه الحالة تسلسل الخادم الوكيل. في هذه الحالة، يجب تكرار جميع الخطوات السابقة للخادم الوكيل المتسلسل إلى أن تحدّد السبب الفعلي لخطأ 415 Unsupported Media Type.
    4. إذا كان الاسم المستعار لمضيف الخادم الهدف يشير إلى خادم الخلفية، هذا يعني أنّ خادم الخلفية يمرّر الترميز غير المتوافق إلى Apigee.

سجلات وصول Nginix

لتشخيص الخطأ باستخدام سجلات الوصول إلى NGINX:

  1. إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول أخطاء 415 في HTTP.
  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-code

    نموذج للخطأ 415 من سجلّ الوصول إلى NGINX:

    يحتوي إدخال النموذج أعلاه من سجل الوصول إلى NGINX على القيم التالية للسمة X- Apigee-error-code وX-Apigee-Error-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. حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي يتم رصده باستخدام مراقبة واجهة برمجة التطبيقات أو سجلات الوصول إلى 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 في الطلب
    • حمولة الطلب بالتنسيق المتوافق مع Apigee Edge وتتطابق مع التنسيق المحدّد في العنوان Content-Encoding
  3. في المثال أعلاه، تحتوي حمولة الطلب على الإضافة gz التي تشير إلى أنّ المحتوى يجب أن يكون gzip. يمكنك حلّ هذه المشكلة من خلال إرسال عنوان الطلب على شكل Content-Encoding: gzip وحمولة الطلب بالتنسيق gzip:

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

السبب: ترميز غير متوافق في الاستجابة

التشخيص

  1. حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي يتم رصده باستخدام مراقبة واجهة برمجة التطبيقات أو أداة التتبُّع أو سجلات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
  2. إذا كانت القيمة 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.

    أداة التتبُّع

    باستخدام ميزة التتبُّع:
    1. إذا لم يكن لديك تتبع الطلب الذي تعذّر تعذُّر إكماله، انتقِل إلى الحلّ.
    2. إذا سجّلت تتبُّع حالة الفشل، يمكنك تحديد الترميز غير المتوافق الذي ضبطه خادم الخلفية كجزء من عنوان الاستجابة Content-Encoding على النحو الموضَّح في أداة التتبُّع.

درجة الدقّة

  1. يمكنك الرجوع إلى قائمة الترميز المتوافقة مع Apigee في الترميز المتوافق.
  2. تأكَّد من أنّ خادم الخلفية يرسل ما يلي دائمًا:
    • الترميز المتوافق فقط كقيمة لعنوان Content-Encoding في الطلب
    • تشير هذه السمة إلى حمولة الاستجابة بالتنسيق المتوافق مع 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 نوع الوسائط غير متوافق

نقاط رئيسية يجب ملاحظتها

لاحظ ما يلي:

  • إذا عرَضَ تطبيق Apigee الخطأ 415 بسبب ترميز غير متوافق تم تمريره في عنوان Content-Encoding كجزء من طلب واجهة برمجة التطبيقات، حينئذٍ:
    • ولن تتمكّن من تسجيل تتبُّع هذه الطلبات.
    • لن تتمكن من تعديل تنسيق أو محتوى استجابة الخطأ المُرسَلة من Apigee Edge باستخدام السياسات مثل riseFault وAssignMessage.

    ويرجع ذلك إلى أنّ هذا الخطأ يحدث في مرحلة مبكرة من معالج الرسائل قبل تنفيذ أي سياسة.

  • إذا عرض Apigee الخطأ 415 بسبب تمرير ترميز غير متوافق في عنوان الاستجابة من خادم الخلفية، يجب إصلاحه في خادم الخلفية لتجنب هذا الخطأ. يُرجى التعاون مع فريق الخلفية بالشكل المناسب لحلّ هذه المشكلة.

إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee Edge، انتقِل إلى ضرورة جمع معلومات التشخيص.

ضرورة جمع معلومات التشخيص

إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، يُرجى جمع معلومات التشخيص التالية، ثم التواصل مع فريق دعم Apigee Edge:

إذا كنت من مستخدمي Cloud Cloud، يُرجى تقديم المعلومات التالية:

  • اسم المؤسسة
  • اسم البيئة
  • اسم الخادم الوكيل لواجهة برمجة التطبيقات
  • أكمِل أمر curl المستخدَم لإعادة إظهار الخطأ 415.
  • ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات

إذا كنت مستخدم Cloud خاصًا، يُرجى تقديم المعلومات التالية:

  • رسالة الخطأ الكاملة التي تم رصدها للطلبات التي تعذّر تنفيذها
  • اسم البيئة
  • حزمة الخادم الوكيل لواجهة برمجة التطبيقات
  • ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات
  • سجلات وصول 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