يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات
Apigee X. المعلومات
المشكلة
يحصل تطبيق العميل على رمز حالة HTTP لـ 500 Internal Server Error
مع رمز الخطأ protocol.http.BadPath
كاستجابة لطلبات واجهة برمجة التطبيقات.
رسالة الخطأ
يتلقى تطبيق العميل رمز الاستجابة التالي:
HTTP/1.1 500 Internal Server Error
بالإضافة إلى ذلك، قد تلاحظ رسالة الخطأ التالية:
{ "fault":{ "faultstring":"Invalid request path", "detail":{ "errorcode":"protocol.http.BadPath" } } }
الأسباب المحتملة
يحدث هذا الخطأ إذا كان عنوان URL لطلب خادم الخلفية، الذي يمثله متغيّر التدفق target.url
، يحتوي على path
تبدأ بعلامة استفهام (?
) بدلاً من شرطة مائلة للأمام (/
)، وهي علامة غير صالحة.
وفقًا لمواصفات RFC 3986، القسم 3: مكوّنات البنية و RFC 3986، القسم 3.3: المسار:
تحتوي بنية معرّف الموارد المنتظم (URI) على المكونات التالية:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment
- إنّ المكوِّن
path
مطلوب، ويجب أن يبدأ بـ ويحتوي دائمًا على شرطة مائلة للأمام (/
).
لذلك، إذا كان عنوان URL لطلب خادم الخلفية يحتوي على مكوّن path
يبدأ بعلامة استفهام (?
) بدلاً من شرطة مائلة للأمام (/
)، سيستجيب Apigee
Edge باستخدام 500 Internal Server Error
ورمز الخطأ
protocol.http.BadPath
.
على سبيل المثال: إذا كانت السمة target.url
تتضمّن القيمة
https://www.mocktarget.apigee.net?json
، يحدث هذا الخطأ عندما يتبين أنّ
path
غير صالحة، لأنّها تبدأ بعلامة استفهام
(?
) بدلاً من شرطة مائلة للأمام (/
).
السبب | الوصف | تعليمات تحديد المشاكل وحلّها السارية على |
---|---|---|
عنوان URL لخادم الخلفية (target.url) يتضمّن مسارًا غير صالح | يبدأ مكوِّن المسار في عنوان URL لخادم الخلفية الذي يتم تمثيله بمتغير التدفق target.url بعلامة استفهام (? ) بدلاً من شرطة مائلة للأمام (/ ). |
مستخدمو Edge العام والخاص على السحابة الإلكترونية |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
الإجراء الأول: استخدام مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تحتوي على رمز الخطأ
protocol.http.BadPath
كما هو موضّح أدناه:يتم عرض المعلومات حول رمز الخطأ
protocol.http.BadPath
كما هو موضح أدناه:انقر على عرض السجلات ووسِّع الصف المتعلق بالطلب الذي تعذّر إكماله.
- من نافذة السجلّات، دوِّن التفاصيل التالية:
- رمز الحالة:
500
- مصدر الخطأ:
target
- رمز الخطأ:
protocol.http.BadPath
- رمز الحالة:
- إذا كان مصدر الخطأ هو
target
ورمز الخطأ هوprotocol.http.BadPath
، يشير ذلك إلى أنّ عنوان URL لخادم الخلفية يتضمّن مسارًا غير صالح.
التتبّع
الإجراء الثاني: استخدام أداة التتبُّع
لتشخيص الخطأ باستخدام أداة التتبُّع:
- فعِّل جلسة التتبُّع وإمّا
- انتظر حتى يحدث الخطأ
500 Internal Server Error
، أو - إذا كان بإمكانك إعادة إظهار المشكلة، يمكنك طلب بيانات من واجهة برمجة التطبيقات لإعادة إظهار المشكلة.
500 Internal Server Error
- انتظر حتى يحدث الخطأ
تأكَّد من تفعيل Show all FlowInfos (إظهار جميع عمليات التدفق):
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص بيانات التتبّع.
- تنقَّل عبر المراحل المختلفة من عملية التتبُّع وحدِّد مكان حدوث الفشل.
ستجد الخطأ عادةً في المسار المطلوب بعد مرحلة بدء تدفق الطلب كما هو موضّح أدناه:
دوِّن قيمة الخطأ في عملية التتبّع:
خطأ: مسار الطلب غير صالح
بما أنّ الخطأ ساهم في رفعه Apigee Edge بعد مرحلة بدء تدفق طلب الاستهداف، يشير ذلك إلى أنّ عنوان URL لخادم الخلفية يتضمّن مسارًا غير صالح. ويحدث هذا على الأرجح إذا تم تعديل متغيّر التدفق
target.url
(الذي يمثّل عنوان URL لخادم الخلفية) في Apigee Edge باستخدام مسار غير صالح من خلال إحدى السياسات في مسار الطلب المستهدَف.- افحص قسم المتغيرات التي تمت قراءتها وتحديدها في كل تدفق بدءًا من تدفق الخطأ وصولاً إلى مرحلة تدفق الطلب المستهدف الذي تم البدء فيه.
- حدِّد السياسة التي تم فيها تعديل متغير التدفق
target.url
:تم تعديل متغيّر التدفق
target.url:
من خلال نموذج تتبُّع يعرض سياسة JavaScript.في نموذج تتبُّع النموذج الموضّح أعلاه، لاحظ أنّه تم تعديل قيمة متغيّر التدفق
target.url
في سياسة JavaScript باسمJS- SetTargetURL
على النحو التالي:target.url : https://mocktarget.apigee.net?json
- يُرجى العلم أنّ القيمة في
target.url
تتضمّن المكوّنات التالية:- المخطّط:
https
- السلطة:
mocktarget.apigee.net
- المسار:
?json
- المخطّط:
- بما أنّ مكوِّن path يبدأ بعلامة استفهام (
?
) بدلاً من شرطة مائلة للأمام (/
)، ستظهر لك رسالة الخطأInvalid request path
. - انتقِل إلى مرحلة AX (بيانات "إحصاءات Google" المسجّلة) في التتبُّع وانقر عليها.
انتقِل للأسفل إلى قسم Stage Details (تفاصيل المرحلة) - Error Headers (عناوين الخطأ) وحدِّد قيمتَي X-Apigee-Error-code وX-Apigee-fulfillment-source كما هو موضّح أدناه:
ستظهر قيمتا X-Apigee-fault-code وX-Apigee-error-source على أنّه
protocol.http.BadPath
وtarget
على التوالي، ما يشير إلى أنّ هذا الخطأ حدث بسبب احتواء عنوان URL لخادم الخلفية على مسار غير صالح.عناوين الاستجابة القيمة X-Apigee-fault-code protocol.http.BadPath
X-Apigee-fault-source target
NGINX
الإجراء 3: استخدام سجلات الوصول إلى NGINX
لتشخيص الخطأ باستخدام سجلات الوصول إلى NGINX:
- إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد
المعلومات الأساسية حول HTTP
500 Internal Server Error
. تحقَّق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- ابحث عن أي أخطاء
500
تتضمّن رمز الخطأprotocol.http.BadPath
خلال مدة معيّنة (إذا حدثت المشكلة في الماضي) أو لمعرفة ما إذا كانت هناك أي طلبات لا تزال يتعذّر تنفيذها مع500
. إذا عثرت على أي أخطاء
500
تتضمّن الرمز X-Apigee-fault-code يُطابق قيمةX-Apigee-fault-code ، حدِّد قيمة X-Apigee-fault-codeنموذج الخطأ 500 من سجل وصول NGINX:
يحتوي إدخال النموذج أعلاه من سجل الوصول إلى NGINX على القيم التالية للسمة X-Apigee- error-code وX-Apigee-Error-source:
العناوين القيمة X-Apigee-fault-code protocol.http.BadPath
X-Apigee-fault-source target
يُرجى العلم أنّ قيمتَي X-Apigee-fault-code وX-Apigee-fault-code هما
protocol.http.BadPath
وtarget
على التوالي، ما يشيران إلى أنّ هذا الخطأ حدث بسبب احتواء عنوان URL لخادم الخلفية على X-Apigee-fault-code.
السبب: يحتوي عنوان URL لخادم الخلفية (target.url) على مسار غير صالح.
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ لـ
500 Internal Server Error
باستخدام مراقبة واجهة برمجة التطبيقات أو أداة التتبُّع أو سجلات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة. - إذا كان رمز الخطأ هو
protocol.http.BadPath
وكانت القيمةtarget
لـ مصدر الخطأ، يشير ذلك إلى أنّ عنوان URL لخادم الخلفية يتضمّن مسارًا غير صالح. يتم تمثيل عنوان URL لخادم الخلفية بمتغير التدفق
target.url
في Apigee Edge. يحدث هذا الخطأ عادةً إذا حاولت تعديل عنوان URL الخاص بخادم الخلفية (target.url
) بشكل ديناميكي باستخدام أيٍّ من السياسات (ضمن الخادم الوكيل/المسار المشترك) في مسار الطلب المستهدَف، بحيث يحتوي على مسار غير صالح.حدِّد ما إذا كان متغيّر التدفق
target.url
يتضمّن حقًا مسار غير صالح ومصدر قيمته باستخدام إحدى الطرق التالية:التتبّع
استخدام أداة التتبُّع
إذا سجّلت آثارًا لهذا الخطأ، اتّبِع الخطوات كما هو موضّح في استخدام أداة التتبُّع .
- تحقَّق ممّا إذا كان
target.url
يتضمّن مسارًا غير صالح، أي أن يبدأ بعلامة استفهام (?
) بدلاً من شرطة مائلة للأمام (/
). إذا كانت الإجابة بنعم، عليك البحث عن السياسة التي عدّلت أو عدّلت قيمة
target.url
لتتضمّن مسارًا غير صالح.تم تعديل متغيّر التدفق
target.url
من خلال نموذج تتبُّع يعرض سياسة JavaScript.- في نموذج التتبُّع أعلاه، لاحظ أنّ سياسة JavaScript قد عدَّلت قيمة
target.url
أو عدّلتها بحيث تحتوي على مسار غير صالح. - يُرجى العلم أنّ
target.url
يتضمّن المكوّنات التالية:- المخطّط:
https
- السلطة:
mocktarget.apigee.net
- المسار:
?json
يبدأ المسار بعلامة استفهام (
?
) بدلاً من شرطة مائلة للأمام (/
)، وبالتالي فهو غير صالح. - المخطّط:
السجلّات
استخدام السجلات في خادم السجل
- إذا لم يتم تتبع هذا الخطأ (مشكلة متقطّعة)، تحقَّق مما إذا كنت قد سجّلت المعلومات حول قيمة متغيّر التدفق
target.url
، وذلك باستخدام سياسات مثل MessageLogging أو سياسة ServiceCallout في خادم السجلّ. - إذا كانت لديك السجلّات، يُرجى مراجعتها وإجراء ما يلي:
- تحقَّق مما إذا كان
target.url
يتضمّن مسارًا غير صالح. - تحقَّق مما إذا كان بإمكانك تحديد معلومات عن السياسة التي تم تعديلها
target.url
لتتضمّن مسارًا غير صالح.
- تحقَّق مما إذا كان
الخادم الوكيل لواجهة برمجة التطبيقات
مراجعة الخادم الوكيل لواجهة برمجة التطبيقات الذي يتعذّر تشغيله
إذا لم يكن لديك بيانات تتبُّع أو سجلّات لهذا الخطأ، راجِع الخادم الوكيل لواجهة برمجة التطبيقات الذي يتعذّر تطبيقه لتحديد العنصر الذي تم تعديله أو تعديله في متغيّر التدفق
target.url
لكي يحتوي على مسار غير صالح. يُرجى الاطّلاع على الروابط التالية:- السياسة ضمن الخادم الوكيل لواجهة برمجة التطبيقات
- أي مسارات مشتركة تم استدعاؤها من الخادم الوكيل
- تحقَّق ممّا إذا كان
راجِع السياسة المحدّدة بعناية (على سبيل المثال: AssignMessage أو JavaScript) التي تعدِّل متغيّر التدفق
target.url
أو تعدّله، وحدِّد سبب تضمين مسار غير صالح في السمةtarget.url
.في ما يلي بعض الأمثلة على السياسات التي تعدّل متغيّر التدفق
target.url
بشكل غير صحيح ليتضمن مسارًا غير صالح يؤدي إلى هذا الخطأ.النموذج الأول
النموذج 1: تعديل سياسة JavaScript لمتغيّر
target.url
var url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
في النموذج أعلاه، لاحِظ أنّه تم تعديل متغير التدفق
target.url
بالقيمةhttps://mocktarget.apigee.net?json
المضمّنة في متغيّر آخرurl.
.تجدر الإشارة إلى أنّ قيمة
url
تتضمّن المكوّنات التالية:- المخطّط:
https
- السلطة:
mocktarget.apigee.net
- المسار:
?json
يبدأ المسار بعلامة استفهام (
?
) بدلاً من الشرطة المائلة للأمام (/
)، وهي علامة غير صالحة. لذلك، تعرض Apigee Edge500 Internal Server Error
مع رمز الخطأprotocol.http.BadPath
.النموذج الثاني
النموذج 2: تعديل سياسة JavaScript للمتغيّر
target.url
استنادًا إلى القيمة في عنوان الطلبvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
في النموذج أعلاه، لاحِظ أنّه يتم تعديل متغير التدفق
target.url
من خلال ربط القيمةhttps://mocktarget.apigee.net
المضمَّنة في المتغيّرurl
و قيمة المتغيّر الآخرpath
، الذي يتم استرداد قيمته منrequest.header.Path.
.إذا كان لديك إذن بالوصول إلى الطلب أو التتبّع الفعلي، يمكنك التحقّق من القيمة الفعلية التي تم تمريرها إلى
request.header.Path
.نموذج طلب قدّمه المستخدم
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: ?user"
في هذا المثال، لا يتم إرسال مسار العنوان كجزء من الطلب. وبالتالي، تكون قيمة المتغيّر
path
في سياسة JavaScript هيnull
.وبالتالي:
url = https://mocktarget.apigee.net + path
url = https://mocktarget.apigee.net + "?user"
target.url = https://mocktarget.apigee.net?user
يُرجى العلم بأنّ قيمة
target.url
تتضمّن المكوّنات التالية:- المخطّط:
https
- السلطة:
mocktarget.apigee.net
- المسار:
?user
يبدأ المسار بعلامة استفهام (
?
) بدلاً من الشرطة المائلة للأمام (/
)، وهي علامة غير صالحة. وبالتالي، تعرض Apigee Edge500 Internal Server Error
برمز الخطأprotocol.http.BadPath
.النموذج الثالث
النموذج رقم 3: سياسة AssignMessage تعديل متغيّر
target.url
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net?echo</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
تجدر الإشارة إلى أنّ قيمة
url
تتضمّن المكوّنات التالية:- المخطّط:
https
- السلطة:
mocktarget.apigee.net
- المسار:
?echo
مجددًا في هذا المثال، يبدأ المسار بعلامة استفهام (
?
) بدلاً من الشرطة المائلة للأمام (/
)، وهي علامة غير صالحة. لذلك، تعرض Apigee Edge500 Internal Server Error
برمز الخطأprotocol.http.BadPath
.- المخطّط:
درجة الدقّة
وفقًا لمواصفات عنوان URL
RFC 3986، القسم 3: مكوّنات البنية، يكون المكوِّن path
مطلوبًا
ويجب أن يبدأ دائمًا بالرمز "/". لذلك عليك اتّباع الخطوات التالية لحلّ هذه المشكلة:
- تأكَّد من أنّ عنوان URL لخادم الخلفية، الذي يمثله متغيّر التدفق
target.url
، يتضمّن دائمًا مسارًا صالحًا ويبدأ دائمًا بشرطة مائلة للأمام (/
).- في بعض الحالات، قد لا يكون لديك اسم مورد في المسار، وبالتالي عليك التأكّد من أنّ
المسار يحتوي على الأقل على شرطة مائلة للأمام (
/
). - إذا استخدمت أي متغيّرات أخرى لتحديد قيمة متغيّر التدفق
target.url
، تأكَّد من أنّ المتغيّرات الأخرى لا تتضمّن مسارًا غير صالح. - في حال إجراء أي عمليات سلسلة لتحديد قيمة متغيّر التدفق
target.url
، تأكَّد من أنّ نتيجة عمليات السلسلة أو نتيجةها لا تتضمّن مسارًا غير صالح.
- في بعض الحالات، قد لا يكون لديك اسم مورد في المسار، وبالتالي عليك التأكّد من أنّ
المسار يحتوي على الأقل على شرطة مائلة للأمام (
وفي النماذج التي تمت مناقشتها أعلاه، يمكنك حلّ هذه المشكلة كما هو موضّح أدناه:
النموذج الأول
النموذج 1: تعديل سياسة JavaScript لمتغيّر
target.url
استخدِم شرطة مائلة للأمام (
/
) بدلاً من علامة الاستفهام (?
) في المتغيّرurl
لحلّ هذه المشكلة كما هو موضّح أدناه:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
النموذج الثاني
النموذج 2: تعديل سياسة JavaScript للمتغيّر
target.url
استنادًا إلى القيمة في عنوان الطلبvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
تأكَّد من اجتياز مسار صالح، على سبيل المثال:
/user
كجزء من عنوان الطلبPath
، لحلّ هذه المشكلة على النحو الموضّح أدناه:نموذج طلب:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
النموذج الثالث
النموذج رقم 3: سياسة AssignMessage تعديل متغيّر
target.url
أضِف مسارًا صالحًا في العنصر
<Value>
في سياسة AssignMessage. ويعني ذلك استبدال علامة الاستفهام (?
) بشرطة مائلة للأمام (/
) في العنصر<Value>
وضبطها علىhttps://mocktarget.apigee.net/echo
لحلّ هذه المشكلة على النحو الموضّح أدناه:<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net/echo</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
المواصفات
يتوقع Apigee Edge أن
path
المكوِّن في عنوان URL لخادم الخلفية يجب أن يبدأ دائمًا بشرطة مائلة للأمام (/
) وفقًا للمواصفات التالية:المواصفات RFC 3986، القسم 3: مكوّنات البنية RFC 3986، القسم 3.3: المسار إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، يُرجى الانتقال إلى ضرورة جمع معلومات التشخيص.
ضرورة جمع معلومات التشخيص
في حال استمرار المشكلة حتى بعد اتّباع التعليمات الواردة أعلاه، يمكنك جمع معلومات التشخيص التالية، ثم التواصل مع فريق دعم Apigee Edge:
إذا كنت من مستخدمي Cloud Cloud، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- أكمِل الأمر
curl
المستخدَم لإعادة إظهار الخطأ500 Internal Server Error
مع عرض رمز الخطأprotocol.http.BadPath
. - ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات
إذا كنت مستخدم Cloud خاصًا، يُرجى تقديم المعلومات التالية:
- رسالة الخطأ الكاملة التي تم رصدها للطلبات التي تعذّر تنفيذها
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات
سجلات وصول 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
المراجع