يتم الآن عرض مستندات 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 العام والخاص على السحابة الإلكترونية |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
الإجراء الأول: استخدام مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تحتوي على رمز الخطأ
protocol.http.EmptyPath
كما هو موضّح أدناه:يتم عرض المعلومات حول رمز الخطأ
protocol.http.EmptyPath
كما هو موضح أدناه:انقر على عرض السجلات لتوسيع الصف الخاص بالطلب الذي تعذّر إكماله.
- من نافذة السجلّات، دوِّن التفاصيل التالية:
- رمز الحالة:
500
- مصدر الخطأ:
target
- رمز الخطأ:
protocol.http.EmptyPath
- رمز الحالة:
- إذا كان مصدر الخطأ هو
target
ورمز الخطأ هوprotocol.http.EmptyPath
، يشير ذلك إلى أنّ عنوان URL لخادم الخلفية يتضمّن مسارًا فارغًا.
التتبّع
الإجراء الثاني: استخدام أداة التتبُّع
لتشخيص الخطأ باستخدام أداة التتبُّع:
- فعِّل جلسة التتبُّع وإمّا
- انتظر حتى يحدث الخطأ
500 Internal Server Error
، أو - إذا كان بإمكانك إعادة إظهار المشكلة، يمكنك طلب بيانات من واجهة برمجة التطبيقات لإعادة إظهار المشكلة.
500 Internal Server Error
- انتظر حتى يحدث الخطأ
تأكَّد من تفعيل Show all FlowInfos (إظهار جميع عمليات التدفق):
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص بيانات التتبّع.
- تنقَّل عبر المراحل المختلفة من عملية التتبُّع وحدِّد مكان حدوث الفشل.
ستجد الخطأ عادةً في المسار المطلوب بعد مرحلة بدء تدفق الطلب كما هو موضّح أدناه:
دوِّن قيمة الخطأ في عملية التتبّع.
خطأ: لا يمكن أن يكون مسار الطلب فارغًا
بما أنّ الخطأ صادر من قِبل Apigee Edge بعد مرحلة بدء تدفق الطلب المستهدَف، يشير ذلك إلى أنّ
path
في عنوان URL لخادم الخلفية فارغ. ويحدث هذا على الأرجح إذا تم تعديل متغيّر التدفقtarget.url
(الذي يمثّل عنوان URL لخادم الخلفية) باستخدام مسار فارغ من خلال إحدى السياسات في مسار الطلب.- افحص قسم المتغيرات التي تمت قراءتها وتعيينها في كل تدفق من نقاط الخطأ إلى مرحلة بدء تدفق الطلب المستهدف.
حدِّد السياسة التي يتم فيها تعديل متغيّر التدفق
target.url
.تم تعديل متغيّر التدفق
target.url
بعد تتبُّع نموذج التتبّع الذي يعرض سياسة JavaScript:في نموذج التتبّع الظاهر أعلاه، لاحظ أنّ قيمة متغيّر التدفق
target.url
يتم تعديلها في سياسة JavaScript باسم SetTargetURL على النحو التالي:target.url : https://mocktarget.apigee.net
- يُرجى العلم أنّ السمة
target.url
تتضمّن المكوّنات التالية:- المخطّط:
https://mocktarget.apigee.net
- المسار: فارغ
- المخطّط:
- لذلك، تظهر لك رسالة الخطأ
Request path cannot be empty
. - انتقِل إلى مرحلة AX (بيانات "إحصاءات Google" المسجّلة) في التتبُّع وانقر عليها.
انتقِل للأسفل إلى قسم Stage Details (تفاصيل المرحلة) - Error Headers (عناوين الخطأ) وحدِّد قيمتَي X-Apigee-Error-code وX-Apigee-fulfillment-source كما هو موضّح أدناه:
- ستظهر قيمتا 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 مطابقًا لقيمة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.EmptyPath
X-Apigee-fault-source target
لاحِظ أنّ قيمتَي X-Apigee-fault-code وX-Apigee-fault-code هما
protocol.http.EmptyPath
وtarget
على التوالي، ما يشيران إلى أنّ هذا الخطأ حدث بسبب احتواء عنوان URL لخادم الخلفية على X-Apigee-fault-code.
السبب: يحتوي عنوان URL لخادم الخلفية (target.url) على مسار فارغ.
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ لـ
500 Internal Server Error
باستخدام مراقبة واجهة برمجة التطبيقات أو أداة التتبُّع أو سجلات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة. - إذا كان رمز الخطأ هو
protocol.http.EmptyPath
وقيمة مصدر الخطأ هي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
- المسار: فارغ
- المخطّط:
السجلّات
استخدام السجلات في خادم السجل
- إذا لم يكن لديك تتبُّع لهذا الخطأ (مشكلة متقطّعة)، تحقَّق مما إذا كنت قد سجّلت المعلومات المتعلقة بقيمة متغيّر التدفق
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" context.setVariable("target.url", url);
في النموذج أعلاه، لاحظ أنّه تم تعديل متغير التدفق
target.url
بالقيمةhttps://mocktarget.apigee.net
المضمّنة في متغيّر آخرurl
.تجدر الإشارة إلى أنّ
target.url
يتضمّن المكوّنات التالية:- المخطّط:
https://mocktarget.apigee.net
- المسار: فارغ
بما أنّ المسار فارغ، تعرض Apigee Edge
500 Internal Server Error
برمز الخطأprotocol.http.EmptyPath
.النموذج الثاني
النموذج 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
- المسار: فارغ
النموذج الثالث
النموذج رقم 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
- المسار: فارغ
في جميع الأمثلة المذكورة أعلاه، المسار في عنوان URL لخادم الخلفية، وهو
target.url
، فارغ، وبالتالي تعرض Apigee Edge500 Internal Server Error
برمز الخطأprotocol.http.EmptyPath
.- المخطّط:
درجة الدقّة
وفقًا للمواصفات
RFC 3986، القسم 2: مكوّنات البنية، يكون المكوِّن path
مطلوبًا ويجب أن يتضمّن دائمًا شرطة مائلة للأمام (/)، حتى إذا لم تكن هناك
أحرف أخرى كجزء من path
. اتّبِع الخطوات التالية لحلّ هذه المشكلة:
- تأكَّد من أنّ عنوان URL لخادم الخلفية، الذي يمثله متغيّر التدفق
target.url
، له دائمًا مسار غير فارغ.- في بعض الحالات، قد لا يكون لديك اسم مورد في المسار، وبالتالي عليك التأكّد من أنّ المسار يحتوي على
شرطة مائلة للأمام على الأقل (
/
). - في حال استخدام أي متغيّرات أخرى لتحديد قيمة متغيّر التدفق
target.url
، تأكَّد من أنّ المتغيّرات الأخرى ليس لها مسار فارغ. - في حال إجراء أي عمليات سلسلة لتحديد قيمة متغيّر التدفق
target.url
، تأكَّد من أنّ نتيجة عمليات السلسلة أو نتيجةها لا تتضمّن مسارًا فارغًا.
- في بعض الحالات، قد لا يكون لديك اسم مورد في المسار، وبالتالي عليك التأكّد من أنّ المسار يحتوي على
شرطة مائلة للأمام على الأقل (
- في النماذج التي تمت مناقشتها في قسم بيانات التشخيص، يمكنك حلّ هذه المشكلة كما هو موضّح أدناه:
النموذج الأول
النموذج 1: تعديل سياسة JavaScript لمتغيّر
target.url
أضِف شرطة مائلة للأمام (
/
) إلى المتغيّرurl
لإصلاح هذه المشكلة كما هو موضّح أدناه:var url = "https://mocktarget.apigee.net/" 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);
تأكَّد من اجتياز مسار صالح، مثل
/iloveapis
كجزء من عنوان الطلبPath
، لحلّ هذه المشكلة كما هو موضّح أدناه:نموذج طلب:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /iloveapis"
النموذج الثالث
النموذج رقم 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 Cloud، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- أكمِل الأمر
curl
المستخدَم لإعادة إظهار الخطأ500 Internal Server Error
مع عرض رمز الخطأprotocol.http.EmptyPath
. - ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات
إذا كنت مستخدم 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