أنت تعرض مستندات 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 Public و Private Cloud |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم من خلال الدور المناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق في الصفحة.
- اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
- تأكَّد من ضبط فلتر الخادم الوكيل على الكل.
- ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تتضمّن رمز الخطأ
protocol.http.DuplicateHeader
. كما هو موضح أدناه:المعلومات عن رمز الخطأ
protocol.http.DuplicateHeader
هي كما هو موضح أدناه:- انقر على عرض السجلات ووسِّع صف الطلب الذي تعذّر تنفيذه.
- من نافذة السجلات، يُرجى ملاحظة التفاصيل التالية:
- رمز الحالة:
400
- مصدر الخطأ:
apigee
- رمز الخطأ:
protocol.http.DuplicateHeader
.
- رمز الحالة:
- إذا كانت قيمة المصدر الخطأ هي
apigee
أوMP
وكان الرمز الخطأ يتضمّن القيمةprotocol.http.DuplicateHeader
، فهذا يعني أن طلب HTTP من احتوى العميل على عناوين مكررة.
أداة التتبُّع
NGINX
لتشخيص الخطأ باستخدام سجلات وصول NGINX:
- إذا كنت مستخدمًا للسحابة الإلكترونية الخاص، يمكنك استخدام سجلات وصول NGINX لتحديد
المعلومات الأساسية حول أخطاء HTTP
400
. تحقق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
المكان: تم استبدال ORG وENV وPORT# بـ القيم الفعلية.
- ابحث لمعرفة ما إذا كانت هناك أي أخطاء
400
خلال مدة محدّدة (إذا كانت حدثت مشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع400
إذا ظهرت أي أخطاء
400
في X-Apigee-fault-code تتطابق مع قيمةprotocol.http.DuplicateHeader
، ثم تحديد قيمة X-Apigee-fault-source..نموذج الخطأ 400 من سجلّ وصول NGINX:
يحتوي إدخال النموذج أعلاه من سجل NGINX Access على القيم التالية لـ X-Apigee- رمز الخطأ وX-Apigee-error-source:
عناوين الردود القيمة X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source MP
السبب: هناك عنوان متكرر في الطلب
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي تم رصده باستخدام واجهة برمجة التطبيقات. المراقبة أو الوصول إلى سجلات NGINX كما هو موضّح في خطوات التشخيص الشائعة.
- إذا كانت قيمة المصدر الخطأ
apigee
أوMP
، فعندئذ سيتم يشير إلى أنّ الطلب المُرسَل من خلال تطبيق العميل إلى Apigee يحتوي على نسخة طبق الأصل العناوين. يمكنك تحديد الرأس الفعلي الذي يتم إرساله أكثر من مرة كجزء من الطلب باستخدام باستخدام إحدى الطرق التالية:
رسالة الخطأ
استخدام رسالة الخطأ
إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تلقّيتها من Apigee Edge، يُرجى الرجوع إلى
faultstring
. يحتويfaultstring
على اسم رأس تم إرساله أكثر من مرة.نموذج لرسالة خطأ:
"faultstring":"Duplicate Header \"Expires\""
- في رسالة الخطأ أعلاه، يمكنك رؤية أن الرأس
Expires
هو يتم إرسالها أكثر من مرة كما هو موضح فيfaultstring
.
طلب فعلي
استخدام الطلب الفعلي
إذا كان لديك إذن بالوصول إلى الطلب الفعلي المقدَّم من تطبيق العميل، إجراء الخطوات التالية:
- تحقَّق من قائمة العناوين التي تم تمريرها في الطلب.
- إذا وجدت أن عنوانًا معينًا يظهر أكثر من مرة في الطلب بنفس القيمة أو قيم مختلفة، فهذا هو السبب بسبب هذا الخطأ.
نموذج طلب:
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
.- وبدلاً من ذلك، إذا كان بإمكانك الوصول إلى سجلات العميل، يمكنك معرفة ما إذا كان لديك معلومات عن الطلب الفعلي الذي تم تقديمه إلى Apigee Edge وتحديد العنوان الذي يتم إرسالها أكثر من مرة.
الدقة
إصلاح التكرار
الخيار #1 [الخيار المقترَح] إصلاح تطبيق العميل لعدم تضمين عناوين مكررة
- حلِّل السبب الذي دفع العميل المحدّد إلى إرسال عنوان مكرّر. على سبيل المثال:
Expires
في الحالة المذكورة أعلاه. تأكَّد من أنّه ما مِن مشكلة في قبول الخوادم الوكيلة لواجهة برمجة التطبيقات. العنوان المكرر. وعادةً ما يكون ذلك غير مرغوب فيه وفقًا لمواصفات HTTP RFC7230: - وإذا لم يكن مرغوبًا فيه، عدِّل تطبيق العميل لعدم إرسال رؤوس مكرّرة.
في المثال الذي تمت مناقشته أعلاه، يُلاحظ أنه تم إرسال العنوان
Expires
مرتين بنفس القيمة، وهو أمر غير مرغوب فيه. يمكنك حل المشكلة من خلال تمرير عنوانExpires
مرة واحدة فقط كما هو موضّح أدناه:curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- إذا كان ذلك مرغوبًا وتريد السماح بالعناوين المكررة، انتقل إلى الخيار #2 استخدام سمة CwC:
CwC
الخيار #2 استخدام سمة CwC
توفّر Apigee
سمة CwC HTTPHeader.<HeaderName>
التي تسمح للعميل
التطبيقات والخوادم المستهدفة لإرسال عناوين مكررة إلى الخوادم الوكيلة لواجهة برمجة التطبيقات في Apigee Edge.
سمة CwC | القيم |
---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
فعلى سبيل المثال، يمكن تعيين الخاصية التالية على معالِجات معالجة الرسائل للسماح بالتكرارات
قيم متعددة للعنوان Expires
.
HTTPHeader.Expires=allowDuplicates, multiValued
- إذا كنت مستخدمًا للسحابة الإلكترونية الخاصة، يمكنك ضبط الموقع لمنع
في Apigee Edge من عرض الخطأ
400 Bad Request
، حتى إذا كان الطلب يحتوي على عناوين مكررة باستخدام إعداد "معالجات الرسائل" لاستخدام الدليل الإرشادي الخاص بالعناوين المكرّرة - إذا كنت مستخدمًا عامًا في Cloud، يُرجى التواصل مع فريق دعم Apigee Edge لضبط هذا الموقع. لمؤسستك.
المواصفات
تتوقع Apigee من تطبيق العميل ألا يرسل عناوين مكررة كجزء من الطلب. وفقًا لمواصفات RFC التالية:
المواصفات |
---|
RFC 7230، الفقرة 3.2.2: ترتيب الحقول |
RFC 7230، القسم 3.2 حقول العناوين |
إذا كنت لا تزال بحاجة إلى مساعدة من Apigee، يُرجى الانتقال إلى يجب جمع معلومات التشخيص.
يجب جمع معلومات التشخيص
اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge.
إذا كنت من مستخدمي Cloud Public، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
curl
المُستخدَم لإعادة إنتاج الخطأ400
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
إذا كنت من مستخدمي Cloud Private، يُرجى تقديم المعلومات التالية:
- ظهور رسالة خطأ كاملة للطلبات التي تعذّر تنفيذها
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
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