502 مدخل غير صالح - رأس الصفحة مكرر

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

المشكلة

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

رسالة الخطأ

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

HTTP/1.1 502 Bad Gateway

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

{
   "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 التي ترسلها الهدف/خادم الخلفية، فإنه يستجيب مع 502 Bad Gateway ورمز الخطأ protocol.http.DuplicateHeader

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

السبب الوصف إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على
هناك رأس متكرر في الرد تحتوي الاستجابة من خادم الخلفية على عناوين مكررة. مستخدمو Edge Public و Private Cloud

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

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

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

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

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

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

    (عرض صورة أكبر)

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

    (عرض صورة أكبر)

  9. تأكَّد من أنّ رمز الحالة هو 502 كما هو موضّح في المثال أعلاه.
  10. انقر على عرض السجلات ووسِّع صف الطلب الذي تعذّر تنفيذه.
  11. من نافذة السجلّات، دوِّن التفاصيل التالية:

    • رمز الحالة: 502
    • مصدر الخطأ: target
    • رمز الخطأ: protocol.http.DuplicateHeader.
  12. المصدر الخطأ هو target، ما يشير إلى أنّ الاستجابة من خادم الخلفية تحتوي على عناوين مكرّرة.

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

لتشخيص الخطأ باستخدام أداة التتبُّع:

  1. فعِّل جلسة التتبع وإمّا
    1. انتظِر إلى أن يحدث الخطأ 502 Bad Gateway أو
    2. إذا كان يمكنك إعادة إنتاج المشكلة، يمكنك طلب بيانات من واجهة برمجة التطبيقات وإعادة إنتاج خطأ واحد (502 Bad Gateway)
  2. تأكَّد من تفعيل عرض كل معلومات التدفق:

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

    (عرض صورة أكبر)

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

    يعرض نموذج التتبّع أعلاه الخطأ كـ Duplicate Header "Expires". منذ تُظهِر Apigee الخطأ بعد إرسال الطلب إلى خادم الخلفية، فيشير إلى أنّ خادم الخلفية قد أرسل العنوان Expires أكثر من مرة.

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

    (عرض صورة أكبر)

  9. ستظهر لك قيمتا X-Apigee-fault-code وX-Apigee-fault-code. في protocol.http.DuplicateHeader وtarget، مما يشير إلى أن ويحدث هذا الخطأ بسبب تمرير الرؤوس المكررة بواسطة خادم الخلفية عنوان الاستجابة Expires.
    عناوين الردود القيمة
    X-Apigee-fault-code protocol.http.DuplicateHeader
    X-Apigee-fault-source target
  10. تحقق مما إذا كنت تستخدم تسلسل الخادم الوكيل أي إذا كان الخادم الهدف أو نقطة النهاية الهدف يستدعي خادمًا وكيلاً آخر في Apigee.

    1. لتحديد ذلك، يمكنك الرجوع إلى مرحلة الخادم تم إرسال طلب إلى الخادم المستهدَف. انقر على إظهار Curl.

    2. تفتح نافذة تجعيد الطلب الذي تم إرساله إلى الخادم المستهدف والتي يمكنك من خلالها تحديد الاسم المستعار لمضيف الخادم المستهدف.

    3. إذا كان الاسم المستعار لمضيف الخادم المستهدف يشير إلى اسم مستعار لمضيف افتراضي، فحينئذٍ يكون الخادم الوكيل والسلسلة. في هذه الحالة، تحتاج إلى تكرار جميع الخطوات المذكورة أعلاه للخادم الوكيل المتسلسل حتى في تحديد سبب الخطأ 502 Bad Gateway.
    4. إذا كان الاسم المستعار لمضيف الخادم الهدف يشير إلى خادم الخلفية، فإنه يشير إلى أن يرسل خادم الخلفية العناوين المكررة في الردّ على Apigee.

NGINX

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

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

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

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

  3. البحث لمعرفة ما إذا كانت هناك أي أخطاء 502 خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع 502
  4. إذا عثرت على أي أخطاء 502 في رمز خطأ X-Apigee مطابقة قيمة protocol.http.DuplicateHeader، ثم تحديد قيمة X-Apigee-fault-source..

    نموذج الخطأ 502 من سجلّ وصول NGINX:

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

    عناوين الردود القيمة
    X-Apigee-fault-code protocol.http.DuplicateHeader
    X-Apigee-fault-source target

السبب: ظهور عنوان مكرّر في الردّ

التشخيص

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

    رسالة الخطأ

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

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

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

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

    طلب فعلي

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

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

      1. أجرِ اتصالاً بالخادم الهدف.

        نموذج طلب للخادم المستهدف المستخدَم في هذا المثال:

        curl -X GET "https://BACKEND_SERVER_HOST/response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT" -v
        
      2. تحقَّق من قائمة العناوين التي تظهر في الردّ.

        نموذج استجابة من الخادم الهدف المُستخدَم في هذا المثال:

        * ...Trimmed...
        > GET /response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT HTTP/2
        > Host: BACKEND_SERVER_HOST
        > User-Agent: curl/7.64.1
        > Accept: */*
        >
        * Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
        < HTTP/2 200
        < date: Fri, 02 Jul 2021 05:29:07 GMT
        < content-type: application/json
        < content-length: 166
        < server: gunicorn/19.9.0
        < Expires: Mon, 21 June 2021 07:28:00 GMT
        < Expires: Mon, 21 June 2021 07:28:00 GMT
        < access-control-allow-origin: *
        < access-control-allow-credentials: true
        <
        ----<Response BODY>------
        * Connection #0 to host httpbin.org left intact
        * Closing connection 0
        

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

      3. في حال ظهور العنوان الذي يظهر اسمه في faultstring أكثر من مرة في استجابة خادم الخلفية، فإن هذا هو السبب في خطأ. في الحالة أعلاه، تم إرسال العنوان Expires أكثر من مرة.

الدقة

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

الخيار #1 [الخيار المقترَح] إصلاح خادم الخلفية لعدم تضمين عناوين مكررة

  1. تحليل السبب وراء إرسال خادم الخلفية المحدّد عنوانًا مكرّرًا Expires والتأكّد مما إذا كان من المقبول أن تقبل خوادم واجهة برمجة التطبيقات الوكيلة ذلك. ضِمن في معظم الحالات، لن يكون مرغوبًا فيه وفقًا لمواصفات HTTP RFC7230:
  2. وإذا لم يكن ذلك مرغوبًا فيه، عدِّل تطبيق الخادم الهدف حتى لا يرسل عناوين مكررة. في المثال الذي تمت مناقشته أعلاه، يُلاحظ أنه تم إرسال العنوان Expires مرتين بنفس القيمة، وهو أمر غير مرغوب فيه. يمكنك حلّ المشكلة من خلال التأكّد من أنّ الخادم الهدف يمرّر عنوان Expires مرة واحدة فقط.
  3. إذا كان ذلك مرغوبًا وتريد السماح بالعناوين المكررة، انتقل إلى الخيار #2 استخدام سمة CwC:

CwC

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

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

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

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

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

المواصفات

تستجيب Apigee باستجابة الخطأ 502 Bad Gateway لأنّها تتوقّع أن تكون سيعمل خادم الخلفية وفقًا لمواصفات RFC التالية:

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

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

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

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

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

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

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

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