500 خطأ في الخادم الداخلي - BadPath

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

  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.BadPath

على سبيل المثال: إذا كانت السمة target.url لها القيمة https://www.mocktarget.apigee.net?json، ثم يحدث هذا الخطأ باعتباره تبيّن أنّ path غير صالح، لأنّه يبدأ بعلامة استفهام. (?) بدلاً من شرطة مائلة للأمام (/).

السبب الوصف إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على
يحتوي عنوان URL لخادم الخلفية (target.url) على مسار غير صالح مكوّن المسار في عنوان URL لخادم الخلفية الذي يتم تمثيله بمتغيّر التدفق يبدأ target.url بعلامة استفهام (?) بدلاً من للأمام. شرطة مائلة (/). مستخدمو Edge Public و Private Cloud

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

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

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

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

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

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

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

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

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

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

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

التتبّع

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

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

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

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

  6. دوِّن قيمة الخطأ من عملية التتبُّع:

    خطأ: مسار الطلب غير صالح

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

  7. اطّلِع على قسم المتغيّرات التي تمت قراءتها وتحديدها في كل مسار من التسلسل العكسي. من تدفق الخطأ نحو مرحلة بدء تدفق الطلب المستهدف.
  8. تحديد السياسة، حيث تم تحديد متغيّر التدفق target.url تاريخ آخر تحديث:

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

    في نموذج التتبُّع الوارد أعلاه، لاحِظ قيمة متغيّر التدفق. يتم تعديل target.url في سياسة JavaScript باسم JS- SetTargetURL على النحو التالي: target.url : https://mocktarget.apigee.net?json

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

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

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

التشخيص

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

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

    التتبّع

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

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

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

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

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

      يبدأ المسار بعلامة استفهام (?) بدلاً من علامة استفهام. شرطة مائلة (/)، لذلك فهي غير صالحة.

    السجلّات

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

    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?json"
    context.setVariable("target.url", url);
    

    في النموذج أعلاه، لاحظ أنه تم تعديل متغيّر التدفق target.url بالقيمة https://mocktarget.apigee.net?json مضمنة في دالة المتغيّر url.

    يُرجى العِلم أنّ قيمة url تحتوي على المكوّنات التالية:

    • المخطّط: https
    • جهة الاتصال: mocktarget.apigee.net
    • المسار: ?json

    يبدأ المسار بعلامة استفهام (?) بدلاً من شرطة مائلة للأمام. (/)، وهو غير صالح. لذلك، تعرض Apigee Edge 500 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 مطلوب ويجب أن يبدأ دائمًا بـ "/". لذا، يُرجى اتّباع الخطوات التالية لحلّ هذه المشكلة:

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

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

    المراجع

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