400 طلب غير صالح - رأس الصفحة

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

المشكلة

يحصل تطبيق العميل على رمز حالة HTTP لـ 400 Bad Request مع رمز الخطأ protocol.http.DuplicateHeader كاستجابة لطلبات واجهة برمجة التطبيقات.

رسالة الخطأ

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

HTTP/1.1 400 Bad Request

بالإضافة إلى ذلك، قد تلاحظ رسالة خطأ مشابهة للرسالة المعروضة أدناه:

{
   "fault":{
      "faultstring":"Duplicate Header \"Expires\"",
      "detail":{
         "errorcode":"protocol.http.DuplicateHeader"
      }
   }
}

الأسباب المحتملة

يحدث هذا الخطأ إذا ظهر عنوان HTTP معيّن غير مسموح له بإنشاء نُسخ طبق الأصل في Apigee Edge أكثر من مرة بقيم مماثلة أو بقيم مختلفة كجزء من طلب HTTP الذي أرسله العميل إلى Apigee Edge.

وفقًا لـ RFC 7230، القسم 3.2.2: الترتيب الميداني، يجب ألا ينشئ المُرسِل حقول عناوين متعددة تحمل اسم الحقل نفسه في الرسالة ما لم يتم تحديد قيمة الحقل بالكامل لحقل العنوان هذا على أنها قائمة مفصولة بفواصل، [أي #(values)] أو حقل العنوان هو استثناء معروف. في حال عثور Apigee Edge على عنوان معيّن، غير مسموح له أن يكون له تكرارات، أكثر من مرة في طلب HTTP الذي أرسله العميل، يستجيب لهذا العنوان بالرمز 400 Bad Request ورمز الخطأ protocol.http.DuplicateHeader.

في ما يلي الأسباب المحتملة لهذا الخطأ:

السبب الوصف تعليمات تحديد المشاكل وحلّها السارية على
عنوان متكرر في الطلب يحتوي طلب HTTP من تطبيق العميل إلى Apigee على عناوين مكررة. مستخدمو Edge العام والخاص على السحابة الإلكترونية

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

استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:

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

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

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

  3. انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
  4. اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
  5. تأكّد من ضبط فلتر الخادم الوكيل على الكل.
  6. ارسم رمز الخطأ مقابل الوقت.
  7. اختَر خلية تحتوي على رمز الخطأ protocol.http.DuplicateHeader كما هو موضّح أدناه:

  8. يتم عرض المعلومات المتعلقة برمز الخطأ protocol.http.DuplicateHeader كما هو موضّح أدناه:

  9. انقر على عرض السجلات ووسِّع الصف المتعلق بالطلب الذي تعذّر إكماله.
  10. من نافذة السجلّات، دوِّن التفاصيل التالية:
    1. رمز الحالة: 400
    2. مصدر الخطأ: apigee
    3. رمز الخطأ: protocol.http.DuplicateHeader.
  11. إذا كان مصدر الخطأ يتضمّن القيمة apigee أو MP ، وكان رمز الخطأ يتضمّن القيمة protocol.http.DuplicateHeader، يعني ذلك أنّ طلب HTTP المقدَّم من العميل يحتوي على عناوين مكرّرة.

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

NGINX

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

  1. إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول أخطاء 400 في HTTP.
  2. تحقَّق من سجلات وصول NGINX:

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

    المكان: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.

  3. ابحث عن أي أخطاء 400 تحدث خلال مدة معيّنة (إذا كانت المشكلة قد حدثت في السابق) أو ما إذا كانت هناك أي طلبات لا تزال يتعذّر معالجتها باستخدام 400.
  4. إذا عثرت على أي أخطاء 400 تتضمّن X-Apigee-fault-code الذي يتطابق مع قيمةX-Apigee-fault-code، حدِّد قيمة X-Apigee-fault-code

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

    يحتوي إدخال النموذج أعلاه من سجل NGINX Access على القيم التالية للسمة X-Apigee- error-code وX-Apigee-Error-source:.

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

السبب: عنوان مكرّر في الطلب

التشخيص

  1. حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي يتم رصده باستخدام مراقبة واجهة برمجة التطبيقات أو سجلات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
  2. إذا كان مصدر الخطأ يتضمّن القيمة apigee أو MP، يعني ذلك أنّ الطلب الذي أرسله تطبيق العميل إلى Apigee يحتوي على عناوين مكرّرة.
  3. يمكنك تحديد العنوان الفعلي الذي يتم إرساله أكثر من مرة كجزء من الطلب باستخدام إحدى الطرق التالية:

    رسالة الخطأ

    استخدام رسالة الخطأ

    1. إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تم تلقّيها من Apigee Edge، يُرجى الرجوع إلى faultstring. يتضمّن faultstring اسم العنوان الذي تم إرساله أكثر من مرة.

      نموذج لرسالة خطأ:

      "faultstring":"Duplicate Header \"Expires\""
      
    2. في رسالة الخطأ أعلاه، يظهر لك أنّ العنوان Expires تم إرساله أكثر من مرة كما هو موضّح في faultstring.

    الطلب الفعلي

    استخدام الطلب الفعلي

    1. إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي أجراه تطبيق العميل، اتّبِع الخطوات التالية:

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

      نموذج طلب:

      curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
      

      في نموذج الطلب أعلاه، يتم إرسال العنوان Expires أكثر من مرة. لذلك، يتعذّر تنفيذ هذا الطلب مع ظهور الخطأ 400 Bad Request ورمز الخطأ: protocol.http.DuplicateHeader.

    2. بدلاً من ذلك، إذا كان لديك إذن بالوصول إلى سجلّات العميل، يمكنك معرفة ما إذا كانت لديك معلومات حول الطلب الفعلي الذي تم إرساله إلى Apigee Edge وتحديد العنوان الذي يتم إرساله أكثر من مرة.

درجة الدقّة

إصلاح التكرار

الخيار 1 [الخيار المُقترَح] إصلاح تطبيق العميل لعدم تضمين عناوين مكرّرة

  1. حلِّل سبب إرسال العميل المحدَّد لعنوان مكرّر. على سبيل المثال، Expires في الحالة المذكورة أعلاه. تحقَّق من قبول الخوادم الوكيلة لواجهة برمجة التطبيقات العنوان المكرّر. لا يُنصح باستخدامها عادةً وفقًا لمواصفات HTTP RFC7230.
  2. إذا لم يكن مرغوبًا فيه، عدِّل تطبيق العميل لعدم إرسال رؤوس مكررة.

    في المثال الذي تمت مناقشته أعلاه، لوحظ أنه يتم إرسال العنوان Expires مرتين بالقيمة نفسها، وهذا أمر غير مرغوب فيه. يمكنك حلّ المشكلة من خلال تمرير العنوان Expires مرة واحدة فقط كما هو موضّح أدناه:

    curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
    
  3. وإذا كان ذلك مرغوبًا فيه وتريد السماح بالعناوين المكرّرة، انتقِل إلى الخيار #2 استخدام سمة CwC.

CwC

الخيار 2: استخدام سمة "CwC"

توفّر Apigee سمة CwC HTTPHeader.<HeaderName> التي تسمح لتطبيقات العميل والخوادم الهدف بإرسال عناوين مكرّرة إلى الخوادم الوكيلة لواجهة برمجة التطبيقات في Apigee Edge.

سمة "CwC" القيم
HTTPHeader.<HeaderName> allowDuplicates,multivalued

على سبيل المثال، يمكن ضبط السمة التالية في "معالجات الرسائل" للسماح بالتكرار وتوفير قيم متعددة للعنوان Expires.

HTTPHeader.Expires=allowDuplicates, multiValued
  1. إذا كنت مستخدمًا على السحابة الإلكترونية الخاصة، يمكنك ضبط الموقع لمنع Apigee Edge من رفع خطأ 400 Bad Request، حتى إذا كان الطلب يحتوي على عناوين مكررة باستخدام دليل كيفية ضبط معالِجات الرسائل لاستخدام عناوين مكررة.
  2. إذا كنت من مستخدمي Public Cloud، يُرجى التواصل مع فريق دعم Apigee Edge لضبط هذا الموقع لمؤسستك.

المواصفات

تتوقّع Apigee ألا يرسل تطبيق العميل عناوين مكررة كجزء من الطلب وفقًا لمواصفات RFC التالية:

المواصفات
RFC 7230، القسم 3.2.2: ترتيب الحقول
RFC 7230، حقول العنوان في القسم 3.2

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

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

اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge.

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

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

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

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