500 خطأ في الخادم الداخلي - مسار فارغ

أنت تعرض مستندات 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: المسار:

  1. يحتوي بنية URI على المكونات التالية:

            foo://example.com:8042/over/there?name=ferret#nose
            \_/   \______________/\_________/ \_________/ \__/
             |            |            |            |       |
          scheme      authority       path        query   fragment
    
  2. المكوِّن 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

خطوات التشخيص الشائعة

استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:

مراقبة واجهة برمجة التطبيقات

الإجراء الأول: استخدام مراقبة واجهة برمجة التطبيقات

لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:

  1. سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم من خلال الدور المناسب.
  2. انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.

  3. انتقل إلى تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق
  4. اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
  5. ارسم رمز الخطأ مقابل الوقت.

  6. اختَر خلية تتضمّن رمز الخطأ protocol.http.EmptyPath كما هو موضّح أدناه:

  7. يتم عرض معلومات عن رمز الخطأ protocol.http.EmptyPath على النحو التالي: كما هو موضح أدناه:

  8. انقر على عرض السجلات لتوسيع صف الطلب الذي تعذّر تنفيذه.

  9. من نافذة السجلات، يُرجى ملاحظة التفاصيل التالية:
    • رمز الحالة: 500
    • مصدر الخطأ: target
    • رمز الخطأ: protocol.http.EmptyPath
  10. إذا كان مصدر الخطأ هو target وكان رمز الخطأ هو protocol.http.EmptyPath، فهذا يعني أن عنوان URL لخادم الخلفية يحتوي على مسار فارغ.

التتبّع

الإجراء رقم 2: استخدام أداة التتبُّع

لتشخيص الخطأ باستخدام أداة التتبُّع:

  1. فعِّل جلسة التتبع وإمّا
    • انتظِر إلى أن يحدث الخطأ 500 Internal Server Error.
    • إذا كان يمكنك إعادة إنتاج المشكلة، يُرجى طلب بيانات من واجهة برمجة التطبيقات لإعادة إنتاج المشكلة. 500 Internal Server Error
  2. تأكَّد من تفعيل عرض كل FlowInfos:

  3. اختَر أحد الطلبات التي تعذّر تنفيذها وافحص عملية التتبُّع.
  4. يمكنك التنقّل خلال مراحل عملية التتبُّع المختلفة وتحديد مكان حدوث الفشل.
  5. سيظهر لك الخطأ عادةً في مسار بعد بدء تدفق الطلب المستهدَف. كما هو موضح أدناه:

  6. سجِّل قيمة الخطأ من عملية التتبُّع.

    خطأ: لا يمكن أن يكون مسار الطلب فارغًا

    بما أنّ الخطأ يتم عرضه من خلال Apigee Edge بعد مرحلة بدء تدفق الطلب المستهدَف، يشير إلى أنّ قيمة path في عنوان URL لخادم الخلفية فارغة. سيؤدي هذا إلى تحدث على الأرجح إذا كان متغير التدفق target.url (الذي يمثل عنوان URL خادم الخلفية ) بمسار فارغ من خلال إحدى السياسات في مسار الطلب.

  7. افحص قسم المتغيّرات التي تمت قراءتها وإسنادها في كل مسار من التدفقات بدءًا من في مرحلة بدء تدفق الطلب المستهدَف.
  8. حدِّد السياسة التي يتم فيها تعديل متغيّر التدفق target.url .

    نموذج تتبُّع يعرض سياسة JavaScript تم تعديل متغيّر التدفق target.url:

    في نموذج التتبُّع الوارد أعلاه، لاحِظ قيمة متغيّر التدفق. يتم تعديل target.url في سياسة JavaScript باسم SetTargetURL باسم التالي:

    target.url : https://mocktarget.apigee.net
    
  9. يُرجى العِلم أنّ ميزة "target.url" تتضمّن المكوّنات التالية:
    • المخطّط: https://mocktarget.apigee.net
    • path: فارغ
  10. لذلك، يظهر لك الخطأ Request path cannot be empty.
  11. انتقِل إلى مرحلة AX (البيانات المسجَّلة في "إحصاءات Google") في عملية التتبُّع وانقر عليها.
  12. مرِّر لأسفل إلى قسم تفاصيل المرحلة - عناوين الخطأ وحدِّد قيمتي X-Apigee-fault-code وX-Apigee-fault-code كما هو موضح أدناه:

  13. وستظهر لك قيم 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:

  1. إذا كنت مستخدمًا للسحابة الإلكترونية الخاص، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول HTTP 500 Internal Server Error.
  2. تحقق من سجلات وصول NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. البحث لمعرفة ما إذا كان هناك أي أخطاء 500 مع رمز الخطأ protocol.http.EmptyPath خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو ما إذا كانت هناك أي طلبات لا تزال تخفق مع 500.
  4. إذا ظهرت أي أخطاء 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) على مسار فارغ

التشخيص

  1. حدِّد رمز الخطأ ومصدر الخطأ في 500 Internal Server Error باستخدام سجلّات وصول واجهة برمجة التطبيقات أو أداة التتبُّع أو NGINX كما هو موضَّح في. خطوات التشخيص الشائعة:
  2. إذا كان رمز الخطأ هو protocol.http.EmptyPath وكان المصدر الخطأ القيمة target، فهذا يشير إلى أن عنوان URL لخادم الخلفية فارغ المسار.
  3. يتم تمثيل عنوان URL لخادم الخلفية من خلال متغيّر التدفق target.url في Apigee الحافة. يحدث هذا الخطأ عادةً إذا حاولت تحديث عنوان URL لخادم الخلفية، أي target.url بشكل ديناميكي باستخدام أي من السياسات (ضمن الخادم الوكيل أو التدفق المشترك) في تدفق الطلب المستهدف، بحيث يتضمن مسارًا فارغًا.

  4. حدِّد ما إذا كان متغير التدفق target.url يتضمن مسارًا فارغًا بالفعل المصدر لقيمته باستخدام إحدى الخطوات التالية:

    التتبّع

    استخدام أداة التتبُّع

    إذا سجّلت تتبُّعًا لهذا الخطأ، استخدِم الخطوات كما هو موضّح في استخدام "أداة التتبُّع" و:

    1. تحقَّق مما إذا كان target.url مسارًا فارغًا.
    2. إذا كانت الإجابة بنعم، يمكنك معرفة السياسة التي عدّلت أو حدّثت قيمة target.url أن تحتوي على مسار فارغ.

      نموذج تتبُّع يعرض سياسة JavaScript تم تعديل متغيّر التدفق target.url:

    3. في نموذج التتبُّع أعلاه، لاحِظ أنّ سياسة JavaScript قد عدَّلت أو عدّلنا قيمة target.url لتتضمّن مسارًا فارغًا.
    4. يُرجى العِلم أنّ أداة target.url تتضمّن المكوّنات التالية:
      • المخطّط: https://mocktarget.apigee.net
      • path: فارغ

    السجلّات

    استخدام السجلّات في خادم السجلّ

    1. إذا لم يظهر أي أثر لهذا الخطأ (مشكلة متقطعة)، بعد ذلك تحقق من لمعرفة ما إذا كنت قد سجّلت المعلومات المتعلّقة بقيمة متغيّر التدفق target.url، باستخدام سياسات مثل تسجيل الرسائل أو ServiceCallout إلى خادم السجلّ.
    2. إذا كانت لديك السجلّات، يُرجى مراجعتها وإجراء ما يلي:
      1. التأكّد مما إذا كان المسار فارغ في السمة target.url
      2. تحقّق من إمكانية تحديد السياسة التي تم تعديلها target.url أن يحتوي على مسار فارغ

    الخادم الوكيل لواجهة برمجة التطبيقات

    مراجعة الخادم الوكيل لواجهة برمجة التطبيقات غير الناجحة

    في حال عدم تتبُّع هذا الخطأ أو سجلّه، راجِع واجهة برمجة التطبيقات التي تعذّر تنفيذها. لتحديد ما عدّل أو عدّل متغير التدفق target.url أن يحتوي على مسار غير صالح تحقق مما يلي:

    • السياسة داخل الخادم الوكيل لواجهة برمجة التطبيقات
    • أي مسارات مشتركة تم استدعاؤها من الخادم الوكيل
  5. فحص السياسة المحدّدة (على سبيل المثال، 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 Edge 500 Internal Server Error مع رمز الخطأ protocol.http.EmptyPath.

الدقة

وفق المواصفات RFC 3986، القسم 2: مكونات بناء الجملة،المكوِّن path هو مطلوبة ويجب أن تحتوي دائمًا على شرطة مائلة للأمام (/)، حتى في حال عدم توفّرها الأحرف الأخرى كجزء من path. نفِّذ الخطوات التالية من أجل حل هذه المشكلة:

  1. تأكَّد من أنّ عنوان URL لخادم الخلفية، ممثله بمتغيّر التدفق. تتضمن أداة target.url دائمًا مسارًا غير فارغ.
    1. في بعض الحالات، قد لا يتوفّر لديك اسم مورد في المسار، ثمّ تأكَّد من أنّ المسار على الأقل فيه شرطة مائلة للأمام (/).
    2. إذا كنت تستخدم أي متغيرات أخرى لتحديد قيمة متغير التدفق target.url، ثم تأكَّد من أنّ المتغيّرات الأخرى ليس لها مسار فارغ.
    3. إذا أجريت أي عمليات سلسلة لتحديد قيمة متغير التدفق target.url، ثم تأكَّد من أنّ نتيجة السلسلة أو نتيجتها لا تحتوي العمليات على مسار فارغ.
  2. في النماذج التي تمت مناقشتها في مقالة التشخيص، يمكنك حلّ هذه المشكلة على النحو التالي: الموضحة أدناه:

    النموذج رقم 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

المراجع

متغيّرات التدفق - الاستهداف