أنت تعرض مستندات 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 Public و Private Cloud |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
الإجراء الأول: استخدام مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم باستخدام الدور المناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق في الصفحة.
- اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تتضمّن رمز الخطأ
protocol.http.BadPath
كما هو موضَّح. أدناه:يتم عرض معلومات عن رمز الخطأ
protocol.http.BadPath
على النحو التالي: كما هو موضح أدناه:انقر على عرض السجلات ووسِّع صف الطلب الذي تعذّر تنفيذه.
- من نافذة السجلات، يُرجى ملاحظة التفاصيل التالية:
- رمز الحالة:
500
- مصدر الخطأ:
target
- رمز الخطأ:
protocol.http.BadPath
- رمز الحالة:
- إذا كان مصدر الخطأ هو
target
وكان رمز الخطأ هوprotocol.http.BadPath
، فهذا يعني أن عنوان URL لخادم الخلفية يحتوي على مسار غير صالح.
التتبّع
الإجراء رقم 2: استخدام أداة التتبُّع
لتشخيص الخطأ باستخدام أداة التتبُّع:
- فعِّل جلسة التتبع وإمّا
- انتظِر إلى أن يحدث الخطأ
500 Internal Server Error
. - إذا كان يمكنك إعادة إنتاج المشكلة، يُرجى طلب بيانات من واجهة برمجة التطبيقات لإعادة إنتاج المشكلة.
500 Internal Server Error
- انتظِر إلى أن يحدث الخطأ
تأكَّد من تفعيل عرض كل FlowInfos:
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص عملية التتبُّع.
- يمكنك التنقّل خلال مراحل عملية التتبُّع المختلفة وتحديد مكان حدوث الفشل.
سيظهر لك الخطأ عادةً في مسار بعد بدء تدفق الطلب المستهدَف كما هو موضح أدناه:
دوِّن قيمة الخطأ من عملية التتبُّع:
خطأ: مسار الطلب غير صالح
بما أنّ Apigee Edge يظهر الخطأ بعد بدء تدفق الطلب المستهدَف فإنها تشير إلى أن عنوان URL لخادم الخلفية يحتوي على مسار غير صالح. سيؤدي هذا إلى يحدث غالبًا إذا كان متغير التدفق
target.url
(الذي يمثل عنوان URL) لخادم الخلفية) في Apigee Edge: تم تعديله من خلال مسار غير صالح واحدة من السياسات في تدفق الطلب المستهدف.- اطّلِع على قسم المتغيّرات التي تمت قراءتها وتحديدها في كل مسار من التسلسل العكسي. من تدفق الخطأ نحو مرحلة بدء تدفق الطلب المستهدف.
- تحديد السياسة، حيث تم تحديد متغيّر التدفق
target.url
تاريخ آخر تحديث:نموذج تتبُّع يعرض سياسة JavaScript تم تعديل متغيّر التدفق
target.url:
في نموذج التتبُّع الوارد أعلاه، لاحِظ قيمة متغيّر التدفق. يتم تعديل
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") في عملية التتبُّع وانقر عليها.
مرِّر لأسفل إلى قسم تفاصيل المرحلة - عناوين الخطأ وحدِّد قيمتي X-Apigee-fault-code وX-Apigee-fault-code كما هو موضح أدناه:
ستظهر لك قيمتا 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 قيمةprotocol.http.BadPath
، ثم حدد قيمة X- مصدر خطأ في Apigee.نموذج الخطأ 500 من سجلّ وصول NGINX:
يتضمن إدخال النموذج أعلاه من سجل وصول NGINX القيم التالية الخاصة بـ X-Apigee- رمز الخطأ و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 لخادم الخلفية على مسار غير صالح.
السبب: يحتوي عنوان URL لخادم الخلفية (target.url) على مسار غير صالح
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ في
500 Internal Server Error
باستخدام سجلّات وصول واجهة برمجة التطبيقات أو أداة التتبُّع أو NGINX كما هو موضَّح في. خطوات التشخيص الشائعة: - إذا كان رمز الخطأ هو
protocol.http.BadPath
وكان المصدر الخطأ على القيمةtarget
، فهذا يشير إلى أن عنوان URL لخادم الخلفية يحتوي على القيمة غير صالحة المسار. يتم تمثيل عنوان URL لخادم الخلفية من خلال متغيّر التدفق
target.url
في Apigee الحافة. يحدث هذا الخطأ عادةً إذا حاولت تعديل عنوان URL لخادم الخلفية. (target.url
) بشكل ديناميكي باستخدام أي من السياسات (ضمن الخادم الوكيل/التدفق المشترك) في تدفق طلب الهدف، بحيث يحتوي على مسار غير صالح.حدِّد ما إذا كان متغيّر التدفق
target.url
يحتوي فعلاً على القيمة غير صالحة. path ومصدر قيمته باستخدام إحدى الطرق التالية:التتبّع
استخدام "أداة التتبُّع"
إذا سجّلت تتبُّعًا لهذا الخطأ، استخدِم الخطوات كما هو موضّح في استخدام أداة "التتبّع"
- تحقَّق مما إذا كان
target.url
يتضمن مسارًا غير صالح، أي إذا كان يبدأ. بعلامة استفهام (?
) بدلاً من شرطة مائلة للأمام (/
). إذا كانت الإجابة بنعم، فتعرف على السياسة التي عدَّلت أو حدّثت قيمة
target.url
لتضمين مسار غير صالح.نموذج تتبُّع يعرض سياسة JavaScript تم تعديل متغيّر التدفق
target.url
- في نموذج التتبُّع أعلاه، لاحِظ أنّ سياسة JavaScript عدَّلت أو عدّلت قيمة
target.url
لتشمل مسارًا غير صالح. - يُرجى العِلم أنّ أداة
target.url
تتضمّن المكوّنات التالية:- المخطّط:
https
- جهة الاتصال:
mocktarget.apigee.net
- المسار:
?json
يبدأ المسار بعلامة استفهام (
?
) بدلاً من علامة استفهام. شرطة مائلة (/
)، لذلك فهي غير صالحة. - المخطّط:
السجلّات
استخدام السجلّات في خادم السجلّ
- إذا لم يظهر لك أي أثر لهذا الخطأ (مشكلة متقطعة)، بعد ذلك تحقق مما إذا كان
سجّلت المعلومات المتعلقة بقيمة متغير التدفق
target.url
، باستخدام سياسات مثل تسجيل الرسائل أو سياسة ServiceCallout على خادم السجلّ. - إذا كانت لديك السجلات، فراجعها
- التأكّد من أنّ المسار
target.url
غير صالح - التحقّق من إمكانية تحديد المعلومات المتعلّقة بالسياسة التي تم تعديلها
target.url
لاحتواء مسار غير صالح
- التأكّد من أنّ المسار
الخادم الوكيل لواجهة برمجة التطبيقات
مراجعة الخادم الوكيل لواجهة برمجة التطبيقات غير الناجحة
في حال عدم تتبُّع هذا الخطأ أو سجلّه، راجِع واجهة برمجة التطبيقات التي تعذّر تنفيذها. لتحديد ما عدّل أو عدّل متغير التدفق
target.url
أن يحتوي على مسار غير صالح تحقق مما يلي:- السياسة داخل الخادم الوكيل لواجهة برمجة التطبيقات
- أي مسارات مشتركة تم استدعاؤها من الخادم الوكيل
- تحقَّق مما إذا كان
فحص السياسة المحددة بعناية (على سبيل المثال: AssignMessage أو JavaScript) الذي يعدِّل يعدّل متغير التدفق
target.url
ويحدد سبب يتم تعديلtarget.url
ليتضمّن مسارًا غير صالح.في ما يلي بعض الأمثلة على السياسات التي تعدِّل متغيّر التدفق
target.url
بشكل غير صحيح لاحتوائها على مسار غير صالح يؤدي إلى هذا الخطأ.النموذج رقم 1
النموذج 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
النموذج 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 Edge الرمز500 Internal Server Error
مع رمز الخطأprotocol.http.BadPath
.النموذج رقم 3
النموذج 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 Edge تعرض الرمز500 Internal Server Error
مع رمز الخطأprotocol.http.BadPath
- المخطّط:
الدقة
وفقًا لمواصفات عنوان URL
RFC 3986، القسم 3: مكونات البنية، والمكوِّن path
مطلوب
ويجب أن يبدأ دائمًا بـ "/". لذا، يُرجى اتّباع الخطوات التالية لحلّ هذه المشكلة:
- تأكَّد من أنّ عنوان URL لخادم الخلفية، ممثله بمتغيّر التدفق.
يحتوي
target.url
دائمًا على مسار صالح ويبدأ دائمًا بـ شرطة مائلة للأمام (/
)- في بعض الحالات، قد لا يتوفّر لديك اسم مورد في المسار، ثمّ تأكَّد من أنّ
يحتوي المسار على الأقل على شرطة مائلة للأمام (
/
). - إذا كنت تستخدم أي متغيرات أخرى لتحديد قيمة متغير التدفق
target.url
، ثم تأكَّد من عدم احتواء المتغيّرات الأخرى على مسار غير صالح. - إذا أجريت أي عمليات سلسلة لتحديد قيمة متغير التدفق
target.url
، ثم تأكَّد من أنّ نتيجة السلسلة أو نتيجتها لا تحتوي العمليات على مسار غير صالح.
- في بعض الحالات، قد لا يتوفّر لديك اسم مورد في المسار، ثمّ تأكَّد من أنّ
يحتوي المسار على الأقل على شرطة مائلة للأمام (
في النماذج الموضّحة أعلاه، يمكنك حلّ هذه المشكلة كما هو موضّح أدناه:
النموذج رقم 1
النموذج 1: تعديل سياسة JavaScript للمتغيّر
target.url
استخدم شرطة مائلة للأمام (
/
) بدلاً من علامة الاستفهام (?
) في المتغيرurl
لحل هذه المشكلة كما هو موضح أدناه:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
النموذج رقم 2
النموذج 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
النموذج 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 Public، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
curl
المستخدَم لإعادة إنتاج الخطأ500 Internal Server Error
الذي يظهر برمز الخطأprotocol.http.BadPath
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
إذا كنت من مستخدمي Cloud Private، يُرجى تقديم المعلومات التالية:
- ظهور رسالة خطأ كاملة للطلبات التي تعذّر تنفيذها
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
سجلات وصول 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
المراجع