أنت تعرض مستندات 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 |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم باستخدام الدور المناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق في الصفحة.
- اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
- تأكَّد من ضبط فلتر الخادم الوكيل على الكل.
- ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تتضمّن رمز الخطأ
protocol.http.DuplicateHeader
كما هو موضّح أدناه:يتم عرض معلومات عن رمز الخطأ
protocol.http.DuplicateHeader
كما هو موضّح أدناه:- تأكَّد من أنّ رمز الحالة هو
502
كما هو موضّح في المثال أعلاه. - انقر على عرض السجلات ووسِّع صف الطلب الذي تعذّر تنفيذه.
من نافذة السجلّات، دوِّن التفاصيل التالية:
- رمز الحالة:
502
- مصدر الخطأ:
target
- رمز الخطأ:
protocol.http.DuplicateHeader
.
- رمز الحالة:
- المصدر الخطأ هو
target
، ما يشير إلى أنّ الاستجابة من خادم الخلفية تحتوي على عناوين مكرّرة.
أداة التتبُّع
لتشخيص الخطأ باستخدام أداة التتبُّع:
- فعِّل جلسة التتبع وإمّا
- انتظِر إلى أن يحدث الخطأ
502 Bad Gateway
أو - إذا كان يمكنك إعادة إنتاج المشكلة، يمكنك طلب بيانات من واجهة برمجة التطبيقات وإعادة إنتاج
خطأ واحد (
502 Bad Gateway
)
- انتظِر إلى أن يحدث الخطأ
تأكَّد من تفعيل عرض كل معلومات التدفق:
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص عملية التتبُّع.
- يمكنك التنقّل خلال مراحل عملية التتبُّع المختلفة وتحديد مكان حدوث الفشل.
ستجد الخطأ عادةً في مسار بعد النقر على تم إرسال الطلب إلى الهدف. الخادم كما هو موضح أدناه:
سجِّل قيمة الخطأ من عملية التتبُّع.
يعرض نموذج التتبّع أعلاه الخطأ كـ
Duplicate Header "Expires"
. منذ تُظهِر Apigee الخطأ بعد إرسال الطلب إلى خادم الخلفية، فيشير إلى أنّ خادم الخلفية قد أرسل العنوانExpires
أكثر من مرة.- انتقِل إلى مرحلة AX (البيانات المسجَّلة في "إحصاءات Google") في عملية التتبُّع وانقر عليها.
مرِّر لأسفل إلى قسم تفاصيل المرحلة - عناوين الاستجابة وحدِّد قيمتي X-Apigee-fault-code وX-Apigee-fault-code كما هو موضح أدناه:
- ستظهر لك قيمتا 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
تحقق مما إذا كنت تستخدم تسلسل الخادم الوكيل أي إذا كان الخادم الهدف أو نقطة النهاية الهدف يستدعي خادمًا وكيلاً آخر في Apigee.
لتحديد ذلك، يمكنك الرجوع إلى مرحلة الخادم تم إرسال طلب إلى الخادم المستهدَف. انقر على إظهار Curl.
تفتح نافذة تجعيد الطلب الذي تم إرساله إلى الخادم المستهدف والتي يمكنك من خلالها تحديد الاسم المستعار لمضيف الخادم المستهدف.
- إذا كان الاسم المستعار لمضيف الخادم المستهدف يشير إلى اسم مستعار لمضيف افتراضي، فحينئذٍ يكون الخادم الوكيل
والسلسلة. في هذه الحالة، تحتاج إلى تكرار جميع الخطوات المذكورة أعلاه للخادم الوكيل المتسلسل حتى
في تحديد سبب الخطأ
502 Bad Gateway
. - إذا كان الاسم المستعار لمضيف الخادم الهدف يشير إلى خادم الخلفية، فإنه يشير إلى أن يرسل خادم الخلفية العناوين المكررة في الردّ على Apigee.
NGINX
لتشخيص الخطأ باستخدام سجلات وصول NGINX:
- إذا كنت مستخدمًا للسحابة الإلكترونية الخاص، يمكنك استخدام سجلات وصول NGINX لإجراء ما يلي:
لتحديد المعلومات الأساسية حول أخطاء HTTP
502
. تحقق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
المكان: تم استبدال ORG وENV وPORT# بـ القيم الفعلية.
- البحث لمعرفة ما إذا كانت هناك أي أخطاء
502
خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع502
إذا عثرت على أي أخطاء
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
السبب: ظهور عنوان مكرّر في الردّ
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي تم رصده باستخدام واجهة برمجة التطبيقات. المراقبة أو الوصول إلى سجلات NGINX كما هو موضّح في خطوات التشخيص الشائعة.
- إذا كانت قيمة المصدر الخطأ هي
target
، هذا يعني أنّ الاستجابة الذي يرسله الخادم الهدف يحتوي على عناوين مكررة. يمكنك تحديد العنوان الفعلي الذي يتم إرساله أكثر من مرة كجزء من الاستجابة باستخدام إحدى الطرق التالية:
رسالة الخطأ
باستخدام رسالة الخطأ:
إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تلقّيتها من Apigee Edge، يُرجى الرجوع إلى إلى
faultstring
. يحتويfaultstring
على اسم العنوان الذي تم إرسال أكثر من مرة.نموذج لرسالة خطأ:
"faultstring":"Duplicate Header \"Expires\""
- في رسالة الخطأ أعلاه، يمكنك رؤية أنّه تم إرسال العنوان
Expires
أكثر من مرة كما هو موضّح فيfaultstring
.
طلب فعلي
باستخدام الطلب الفعلي:
- إذا لم تتوفر لديك إمكانية الوصول إلى الطلب الفعلي الذي تم تقديمه إلى الخادم الهدف،
الأمر
curl
المقابل من استخدام أداة التتبع الخطوة 10.أ الخطوة 10.ب. إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي تم تقديمه إلى تطبيق الخادم الهدف، ثم نفِّذ الخطوات التالية:
أجرِ اتصالاً بالخادم الهدف.
نموذج طلب للخادم المستهدف المستخدَم في هذا المثال:
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
تحقَّق من قائمة العناوين التي تظهر في الردّ.
نموذج استجابة من الخادم الهدف المُستخدَم في هذا المثال:
* ...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
.في حال ظهور العنوان الذي يظهر اسمه في
faultstring
أكثر من مرة في استجابة خادم الخلفية، فإن هذا هو السبب في خطأ. في الحالة أعلاه، تم إرسال العنوانExpires
أكثر من مرة.
الدقة
إصلاح التكرار
الخيار #1 [الخيار المقترَح] إصلاح خادم الخلفية لعدم تضمين عناوين مكررة
- تحليل السبب وراء إرسال خادم الخلفية المحدّد عنوانًا مكرّرًا
Expires
والتأكّد مما إذا كان من المقبول أن تقبل خوادم واجهة برمجة التطبيقات الوكيلة ذلك. ضِمن في معظم الحالات، لن يكون مرغوبًا فيه وفقًا لمواصفات HTTP RFC7230: - وإذا لم يكن ذلك مرغوبًا فيه، عدِّل تطبيق الخادم الهدف حتى لا يرسل عناوين مكررة.
في المثال الذي تمت مناقشته أعلاه، يُلاحظ أنه تم إرسال العنوان
Expires
مرتين بنفس القيمة، وهو أمر غير مرغوب فيه. يمكنك حلّ المشكلة من خلال التأكّد من أنّ الخادم الهدف يمرّر عنوانExpires
مرة واحدة فقط. - إذا كان ذلك مرغوبًا وتريد السماح بالعناوين المكررة، انتقل إلى الخيار #2 استخدام سمة CwC:
CwC
الخيار #2 استخدام سمة CwC
توفّر Apigee سمة CwC
HTTPHeader.<HeaderName>
، الذي يسمح بتطبيقات العميل والاستهداف
الخوادم لإرسال عناوين مكررة إلى الخوادم الوكيلة لواجهة برمجة التطبيقات في Apigee Edge.
سمة CwC | القيم |
---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
فعلى سبيل المثال، يمكن تعيين الخاصية التالية على معالِجات معالجة الرسائل للسماح بالتكرارات.
وقيم متعددة للعنوان Expires
.
HTTPHeader.Expires=allowDuplicates, multiValued
- إذا كنت مستخدمًا في Cloud Private، يمكنك ضبط الموقع لمنع استخدام Apigee.
مشكلة من إظهار الخطأ
502 Bad Gateway
، حتى إذا احتوى الطلب على تكرار الرؤوس باستخدام إعداد "معالجات الرسائل" لاستخدام الدليل الإرشادي الخاص بالعناوين المكرّرة - إذا كنت مستخدمًا عامًا في 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