أنت تعرض مستندات Apigee Edge.
انتقل إلى
مستندات Apigee X. معلومات
المشكلة
يحصل تطبيق العميل على رمز حالة HTTP 500 Internal Server Error
مع
رمز الخطأ protocol.http.EmptyPath
كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.
رسالة الخطأ
يحصل تطبيق العميل على رمز الاستجابة التالي:
HTTP/1.1 500 Internal Server Error
بالإضافة إلى ذلك، قد تلاحظ رسالة الخطأ التالية:
{ "fault":{ "faultstring":"Request path cannot be empty", "detail":{ "errorcode":"protocol.http.EmptyPath" } } }
الأسباب المحتملة
يحدث هذا الخطأ في حال كان عنوان URL للطلب لخادم الخلفية الذي يمثّله متغيّر التدفق
target.url
، يحتوي على مسار فارغ.
وفقًا للمواصفات 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.EmptyPath
على سبيل المثال: إذا كانت السمة target.url
لها القيمة
https://www.mocktarget.apigee.net
، ثم يحدث هذا الخطأ باعتباره
path
المكوّن فارغ أو غير متوفّر.
السبب | الوصف | إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على |
---|---|---|
يحتوي عنوان URL لخادم الخلفية (target.url) على مسار فارغ | عنوان URL لخادم الخلفية الذي يمثّله متغيّر التدفق target.url يتضمّن مسارًا فارغًا. |
مستخدمو Edge Public و Private Cloud |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
الإجراء الأول: استخدام مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم من خلال الدور المناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق
- اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تتضمّن رمز الخطأ
protocol.http.EmptyPath
كما هو موضّح أدناه:يتم عرض معلومات عن رمز الخطأ
protocol.http.EmptyPath
على النحو التالي: كما هو موضح أدناه:انقر على عرض السجلات لتوسيع صف الطلب الذي تعذّر تنفيذه.
- من نافذة السجلات، يُرجى ملاحظة التفاصيل التالية:
- رمز الحالة:
500
- مصدر الخطأ:
target
- رمز الخطأ:
protocol.http.EmptyPath
- رمز الحالة:
- إذا كان مصدر الخطأ هو
target
وكان رمز الخطأ هوprotocol.http.EmptyPath
، فهذا يعني أن عنوان URL لخادم الخلفية يحتوي على مسار فارغ.
التتبّع
الإجراء رقم 2: استخدام أداة التتبُّع
لتشخيص الخطأ باستخدام أداة التتبُّع:
- فعِّل جلسة التتبع وإمّا
- انتظِر إلى أن يحدث الخطأ
500 Internal Server Error
. - إذا كان يمكنك إعادة إنتاج المشكلة، يُرجى طلب بيانات من واجهة برمجة التطبيقات لإعادة إنتاج المشكلة.
500 Internal Server Error
- انتظِر إلى أن يحدث الخطأ
تأكَّد من تفعيل عرض كل FlowInfos:
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص عملية التتبُّع.
- يمكنك التنقّل خلال مراحل عملية التتبُّع المختلفة وتحديد مكان حدوث الفشل.
سيظهر لك الخطأ عادةً في مسار بعد بدء تدفق الطلب المستهدَف. كما هو موضح أدناه:
سجِّل قيمة الخطأ من عملية التتبُّع.
خطأ: لا يمكن أن يكون مسار الطلب فارغًا
بما أنّ الخطأ يتم عرضه من خلال Apigee Edge بعد مرحلة بدء تدفق الطلب المستهدَف، يشير إلى أنّ قيمة
path
في عنوان URL لخادم الخلفية فارغة. سيؤدي هذا إلى تحدث على الأرجح إذا كان متغير التدفقtarget.url
(الذي يمثل عنوان URL خادم الخلفية ) بمسار فارغ من خلال إحدى السياسات في مسار الطلب.- افحص قسم المتغيّرات التي تمت قراءتها وإسنادها في كل مسار من التدفقات بدءًا من في مرحلة بدء تدفق الطلب المستهدَف.
حدِّد السياسة التي يتم فيها تعديل متغيّر التدفق
target.url
.نموذج تتبُّع يعرض سياسة JavaScript تم تعديل متغيّر التدفق
target.url
:في نموذج التتبُّع الوارد أعلاه، لاحِظ قيمة متغيّر التدفق. يتم تعديل
target.url
في سياسة JavaScript باسم SetTargetURL باسم التالي:target.url : https://mocktarget.apigee.net
- يُرجى العِلم أنّ ميزة "
target.url
" تتضمّن المكوّنات التالية:- المخطّط:
https://mocktarget.apigee.net
- path: فارغ
- المخطّط:
- لذلك، يظهر لك الخطأ
Request path cannot be empty
. - انتقِل إلى مرحلة AX (البيانات المسجَّلة في "إحصاءات Google") في عملية التتبُّع وانقر عليها.
مرِّر لأسفل إلى قسم تفاصيل المرحلة - عناوين الخطأ وحدِّد قيمتي X-Apigee-fault-code وX-Apigee-fault-code كما هو موضح أدناه:
- وستظهر لك قيم X-Apigee-fault-code وX-Apigee-fault-code على النحو التالي:
protocol.http.EmptyPath
وtarget
على التوالي، مما يشير إلى أن سبب هذا الخطأ هو أن عنوان URL لخادم الخلفية يحتوي على مسار فارغ.عناوين الردود القيمة X-Apigee-fault-code protocol.http.EmptyPath
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.EmptyPath
خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو ما إذا كانت هناك أي طلبات لا تزال تخفق مع500
. إذا ظهرت أي أخطاء
500
في رمز الخطأ X-Apigee-fault-code قيمةprotocol.http.EmptyPath
، ثم حدِّد قيمة X-Apigee-fault-source.نموذج الخطأ 500 من سجلّ وصول NGINX:
يتضمن الإدخال النموذجي أعلاه من سجل وصول NGINX القيم التالية الخاصة بـ X- Apigee-يتوفر كود وX-Apigee-error-source:
العناوين القيمة X-Apigee-fault-code protocol.http.EmptyPath
X-Apigee-fault-source target
تجدر الإشارة إلى أنّ قيمتَي X-Apigee-fault-code وX-Apigee-fault-code
protocol.http.EmptyPath
وtarget
على التوالي، مما يشير إلى أن يحدث هذا الخطأ بسبب أن عنوان URL لخادم الخلفية يحتوي على مسار فارغ.
السبب: يحتوي عنوان URL لخادم الخلفية (target.url) على مسار فارغ
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ في
500 Internal Server Error
باستخدام سجلّات وصول واجهة برمجة التطبيقات أو أداة التتبُّع أو NGINX كما هو موضَّح في. خطوات التشخيص الشائعة: - إذا كان رمز الخطأ هو
protocol.http.EmptyPath
وكان المصدر الخطأ القيمةtarget
، فهذا يشير إلى أن عنوان URL لخادم الخلفية فارغ المسار. يتم تمثيل عنوان URL لخادم الخلفية من خلال متغيّر التدفق
target.url
في Apigee الحافة. يحدث هذا الخطأ عادةً إذا حاولت تحديث عنوان URL لخادم الخلفية، أيtarget.url
بشكل ديناميكي باستخدام أي من السياسات (ضمن الخادم الوكيل أو التدفق المشترك) في تدفق الطلب المستهدف، بحيث يتضمن مسارًا فارغًا.- حدِّد ما إذا كان متغير التدفق
target.url
يتضمن مسارًا فارغًا بالفعل المصدر لقيمته باستخدام إحدى الخطوات التالية:التتبّع
استخدام أداة التتبُّع
إذا سجّلت تتبُّعًا لهذا الخطأ، استخدِم الخطوات كما هو موضّح في استخدام "أداة التتبُّع" و:
- تحقَّق مما إذا كان
target.url
مسارًا فارغًا. إذا كانت الإجابة بنعم، يمكنك معرفة السياسة التي عدّلت أو حدّثت قيمة
target.url
أن تحتوي على مسار فارغ.نموذج تتبُّع يعرض سياسة JavaScript تم تعديل متغيّر التدفق
target.url:
- في نموذج التتبُّع أعلاه، لاحِظ أنّ سياسة JavaScript قد عدَّلت أو
عدّلنا قيمة
target.url
لتتضمّن مسارًا فارغًا. - يُرجى العِلم أنّ أداة
target.url
تتضمّن المكوّنات التالية:- المخطّط:
https://mocktarget.apigee.net
- path: فارغ
- المخطّط:
السجلّات
استخدام السجلّات في خادم السجلّ
- إذا لم يظهر أي أثر لهذا الخطأ (مشكلة متقطعة)، بعد ذلك تحقق من
لمعرفة ما إذا كنت قد سجّلت المعلومات المتعلّقة بقيمة متغيّر التدفق
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" context.setVariable("target.url", url);
في النموذج أعلاه، لاحظ أنه تم تعديل متغيّر التدفق
target.url
بالقيمةhttps://mocktarget.apigee.net
المضمنة في متغير آخرurl
يُرجى العِلم أنّ أداة
target.url
تتضمّن المكوّنات التالية:- المخطّط:
https://mocktarget.apigee.net
- path: فارغ
بما أنّ المسار فارغ، تعرض Apigee Edge القيمة
500 Internal Server Error
مع رمز الخطأprotocol.http.EmptyPath
.النموذج رقم 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>
في هذا المثال، لا يتم إرسال مسار العنوان كجزء من الطلب. ومن ثم، تكون القيمة للمسار المتغير في سياسة JavaScript هو
null
.وبالتالي:
url = https://mocktarget.apigee.net + path
url = https://mocktarget.apigee.net + null
target.url = https://mocktarget.apigee.netnull
يُرجى العِلم أنّ ميزة "
target.url
" تتضمّن المكوّنات التالية:- المخطّط:
https://mocktarget.apigee.netnull
- path: فارغ
النموذج رقم 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</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
يُرجى العِلم أنّ ميزة "
target.url
" تتضمّن المكوّنات التالية:- المخطّط:
https://mocktarget.apigee.net
- path: فارغ
في جميع الأمثلة السابقة، المسار في عنوان URL لخادم الخلفية، والذي يمثل
target.url
فارغة، لذلك يعود Apigee Edge500 Internal Server Error
مع رمز الخطأprotocol.http.EmptyPath
.- المخطّط:
الدقة
وفق المواصفات
RFC 3986، القسم 2: مكونات بناء الجملة،المكوِّن path
هو
مطلوبة ويجب أن تحتوي دائمًا على شرطة مائلة للأمام (/)، حتى في حال عدم توفّرها
الأحرف الأخرى كجزء من path
. نفِّذ الخطوات التالية من أجل
حل هذه المشكلة:
- تأكَّد من أنّ عنوان URL لخادم الخلفية، ممثله بمتغيّر التدفق.
تتضمن أداة
target.url
دائمًا مسارًا غير فارغ.- في بعض الحالات، قد لا يتوفّر لديك اسم مورد في المسار، ثمّ تأكَّد من أنّ المسار
على الأقل فيه شرطة مائلة للأمام (
/
). - إذا كنت تستخدم أي متغيرات أخرى لتحديد قيمة متغير التدفق
target.url
، ثم تأكَّد من أنّ المتغيّرات الأخرى ليس لها مسار فارغ. - إذا أجريت أي عمليات سلسلة لتحديد قيمة متغير التدفق
target.url
، ثم تأكَّد من أنّ نتيجة السلسلة أو نتيجتها لا تحتوي العمليات على مسار فارغ.
- في بعض الحالات، قد لا يتوفّر لديك اسم مورد في المسار، ثمّ تأكَّد من أنّ المسار
على الأقل فيه شرطة مائلة للأمام (
- في النماذج التي تمت مناقشتها في مقالة التشخيص، يمكنك حلّ هذه المشكلة على النحو التالي:
الموضحة أدناه:
النموذج رقم 1
النموذج 1: تعديل سياسة JavaScript للمتغيّر
target.url
أضِف شرطة مائلة للأمام (
/
) إلى المتغيّرurl
لحلّ هذه المشكلة. كما هو موضح أدناه:var url = "https://mocktarget.apigee.net/" 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);
عليك التأكّد من اجتياز مسار صالح، مثل
/iloveapis
، كجزء من عنوان الطلبPath
لحلّ هذه المشكلة على النحو الموضّح أدناه:نموذج طلب:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /iloveapis"
النموذج رقم 3
النموذج 3: سياسة AssignMessage التي تعدّل المتغيّر
target.url
من خلال متغيّر آخرأضِف مسارًا صالحًا في العنصر
<Value>
في سياسة AssignMessage. بالنسبة على سبيل المثال، يمكنك استخدام/json
كمسار MockTarget API. وهذا يعني تعديل العنصر<Value>
ليصبحhttps://mocktarget.apigee.net/json
كما هو موضح أدناه:<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net/json</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
المواصفات
تتوقع Apigee Edge أن عنوان URL لخادم الخلفية ليس له مسار فارغ وفقًا لما يلي: المواصفات التالية:
المواصفات |
---|
RFC 3986، القسم 3: مكونات البنية |
RFC 3986، الفقرة 3.3: المسار |
إذا كنت لا تزال بحاجة إلى مساعدة من Apigee، يُرجى الانتقال إلى يجب جمع معلومات التشخيص.
يجب جمع معلومات التشخيص
في حال استمرار المشكلة حتى بعد اتّباع التعليمات أعلاه، يُرجى جمع ما يلي معلومات التشخيص، ثم التواصل مع فريق دعم Apigee Edge.
إذا كنت من مستخدمي Cloud Public، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
curl
المستخدَم لإعادة إنتاج الخطأ500 Internal Server Error
الذي يظهر برمز الخطأprotocol.http.EmptyPath
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
إذا كنت من مستخدمي 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