أنت تعرض مستندات 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.EmptyPathX-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.EmptyPathX-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.urlvar 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.urlvar 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 + pathurl = https://mocktarget.apigee.net + nulltarget.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.urlvar 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 - ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
إذا كنت مستخدمًا للسحابة الإلكترونية الخاصة، قدِّم المعلومات التالية:
- ظهور رسالة خطأ كاملة للطلبات التي تعذّر تنفيذها
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
سجلات وصول 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