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 Public و Private Cloud
ترميز غير متوافق مستخدَم في الاستجابة يحتوي عنوان استجابة خادم الخلفية Content-Encoding على ترميز لا يتوافق مع Apigee Edge. مستخدمو Edge Public و Private Cloud

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

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

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

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

  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. تأكَّد من تفعيل عرض كل FlowInfos:

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

  6. سجِّل قيمة الخطأ من عملية التتبُّع.

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

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

  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. لتحديد ذلك، يمكنك الرجوع إلى مرحلة تم إرسال الطلب إلى الخادم الهدف. انقر على إظهار Curl.

    2. تفتح نافذة تجعيد الطلب الذي تم إرساله إلى الخادم المستهدف والتي يمكنك من خلالها تحديد الاسم المستعار لمضيف الخادم المستهدف.
    3. إذا كان الاسم المستعار لمضيف الخادم المستهدف يشير إلى اسم مستعار لمضيف افتراضي، فحينئذٍ يكون الخادم الوكيل والسلسلة. في هذه الحالة، تحتاج إلى تكرار جميع الخطوات المذكورة أعلاه للخادم الوكيل المتسلسل حتى في تحديد سبب الخطأ 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-يتوفر كود و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 وكان الخطأ قيمة المصدر (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. الطلب
    • يجب أن تكون حمولة الطلب بالتنسيق المتوافق مع 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 تنسيق gzip لنظام التشغيل Unix
deflate يستخدم هذا التنسيق بنية zlib مع خوارزمية ضغط الانكماش.

المواصفات

تستجيب Apigee باستجابة الخطأ 415 Unsupported Media Type وفقًا لما تنص عليه مواصفات RFC التالية:

المواصفات
RFC 7231، الفقرة 6.5.13: 415 نوع الوسائط غير المتوافق

نقاط رئيسية يجب مراعاتها

يُرجى ملاحظة ما يلي:

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

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

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

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

يجب جمع معلومات التشخيص

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

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

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

إذا كنت مستخدمًا للسحابة الإلكترونية الخاصة، قدِّم المعلومات التالية:

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