شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
علامت
برنامه سرویس گیرنده کد وضعیت HTTP 500 Internal Server Error را با protocol.http.BadPath کد خطا دریافت می کند.http.BadPath به عنوان پاسخی برای تماس های API.
پیغام خطا
برنامه مشتری کد پاسخ زیر را دریافت می کند:
HTTP/1.1 500 Internal Server Error
علاوه بر این، ممکن است پیغام خطای زیر را مشاهده کنید:
{
"fault":{
"faultstring":"Invalid request path",
"detail":{
"errorcode":"protocol.http.BadPath"
}
}
}علل احتمالی
این خطا در صورتی رخ می دهد که URL درخواست سرور پشتیبان، که با متغیر جریان target.url نشان داده شده است، حاوی یک path باشد. path که با علامت سوال ( ? ) به جای اسلش رو به جلو ( / ) شروع می شود که نامعتبر است.
مطابق با مشخصات 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.BadPath کد خطا پاسخ می دهد.http.BadPath .
به عنوان مثال: اگر target.url دارای مقدار https://www.mocktarget.apigee.net?json باشد، این خطا زمانی رخ می دهد که path نامعتبر است، زیرا به جای علامت سوال ( ? ) شروع می شود. یک اسلش رو به جلو ( / ).
| علت | توضیحات | دستورالعمل های عیب یابی قابل اجرا برای |
|---|---|---|
| URL سرور Backend (target.url) دارای یک مسیر نامعتبر است | مؤلفه مسیر در URL سرور باطن که با متغیر جریان target.url نشان داده شده است به جای اسلش رو به جلو ( / ) با علامت سؤال ( ? ) شروع می شود. | کاربران Edge Public و Private Cloud |
مراحل تشخیص رایج
برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:
مانیتورینگ API
روش شماره 1: استفاده از مانیتورینگ API
برای تشخیص خطا با استفاده از API Monitoring:
- به عنوان کاربر با نقش مناسب وارد رابط کاربری Apigee Edge شوید .
به سازمانی که میخواهید در آن موضوع را بررسی کنید بروید.

- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
کد خطا را در برابر زمان ترسیم کنید.
سلولی را انتخاب کنید که دارای
protocol.http.BadPathکد خطا باشد.http.BadPath مانند شکل زیر:
اطلاعات مربوط به
protocol.http.BadPathکد خطا.http.BadPath مطابق شکل زیر نمایش داده می شود:
روی View logs کلیک کنید و ردیف درخواست ناموفق را گسترش دهید.

- از پنجره Logs به جزئیات زیر توجه کنید:
- کد وضعیت:
500 - منبع خطا:
target - کد خطا:
protocol.http.BadPath
- کد وضعیت:
- اگر منبع خطا
targetو کد خطاprotocol.http.BadPathاست.http.BadPath است، این نشان میدهد که URL سرور backend مسیر نامعتبری دارد.
ردیابی
روش شماره 2: با استفاده از ابزار Trace
برای تشخیص خطا با استفاده از ابزار Trace:
- جلسه ردیابی و یکی را فعال کنید
- صبر کنید تا خطای
500 Internal Server Errorرخ دهد یا - اگر میتوانید مشکل را تکرار کنید، با API تماس بگیرید تا
500 Internal Server Errorبازتولید شود.
- صبر کنید تا خطای
اطمینان حاصل کنید که نمایش همه FlowInfos فعال است:

- یکی از درخواست های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
- در مراحل مختلف ردیابی پیمایش کنید و محل وقوع شکست را پیدا کنید.
خطا را معمولاً در یک جریان پس از مرحله شروع جریان درخواست هدف ، مطابق شکل زیر خواهید دید:

به مقدار خطا از trace توجه کنید:
خطا: مسیر درخواست نامعتبر است
از آنجایی که خطا توسط Apigee Edge پس از مرحله شروع جریان درخواست هدف مطرح میشود، نشان میدهد که URL سرور پشتیبان دارای یک مسیر نامعتبر است. اگر متغیر جریان
target.url(که نشاندهنده نشانی وب سرور باطن است) در Apigee Edge احتمالاً با یک مسیر نامعتبر از طریق یکی از خطمشیها در جریان درخواست هدف بهروزرسانی شده باشد، به احتمال زیاد این اتفاق میافتد.- بخش Variables Read and Assigned در هر یک از جریانهای برگشتی از جریان خطا به سمت فاز شروع درخواست جریان هدف را بررسی کنید.
- خط مشی را تعیین کنید، جایی که متغیر جریان
target.urlبه روز شد:ردیابی نمونه نشان دهنده خط مشی جاوا اسکریپت متغیر جریان
target.url:
در نمونه ردیابی نشان داده شده در بالا، توجه داشته باشید که مقدار متغیر جریان
target.urlدر یک خط مشی جاوا اسکریپت به نامJS- SetTargetURLبه صورت زیر به روز می شود:target.url : https://mocktarget.apigee.net?json - توجه داشته باشید که مقدار در
target.urlدارای اجزای زیر است:- طرح:
https - مرجع:
mocktarget.apigee.net - مسیر:
?json
- طرح:
- از آنجایی که جزء مسیر با علامت سوال (
?) به جای اسلش رو به جلو (/) شروع می شود، با خطایInvalid request pathمواجه می شوید. - در Trace به فاز AX (Analytics Data Recorded) بروید و روی آن کلیک کنید.
به قسمت Phase Details - Error Headers بروید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را مطابق شکل زیر تعیین کنید:

مقادیر X-Apigee-fault-code و X-Apigee-fault-source را به عنوان
protocol.http.BadPathوtargetخواهید دید.targetبه ترتیب، نشان می دهد که این خطا به این دلیل است که URL سرور باطن دارای یک مسیر نامعتبر است.سرصفحه های پاسخ ارزش X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source target
NGINX
روش شماره 3: استفاده از گزارش های دسترسی NGINX
برای تشخیص خطا با استفاده از گزارش های دسترسی NGINX:
- اگر کاربر Private Cloud هستید، می توانید از گزارش های دسترسی NGINX برای تعیین اطلاعات کلیدی مربوط به
500 Internal Server Errorاستفاده کنید. گزارش های دسترسی NGINX را بررسی کنید:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log- جستجو کنید تا ببینید آیا
500خطا درprotocol.http.BadPathکد خطا وجود دارد500 اگر هر
500خطا با کد X-Apigee-fault-code مطابق با مقدارprotocol.http.BadPathپیدا کردید، سپس مقدار X-Apigee-fault-source را تعیین کنید.نمونه خطای 500 از گزارش دسترسی NGINX:

ورودی نمونه بالا از گزارش دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
سرصفحه ها ارزش X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source targetتوجه داشته باشید که مقادیر X-Apigee-fault-code و X-Apigee-fault-source
protocol.http.BadPathوtargetهستند.targetبه ترتیب، نشان می دهد که این خطا به این دلیل است که URL سرور باطن دارای یک مسیر نامعتبر است.
علت: URL سرور Backend (target.url) دارای یک مسیر نامعتبر است
تشخیص
- کد خطا و منبع خطا را برای
500 Internal Server Errorبا استفاده از API Monitoring، Trace Tool یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید. - اگر کد خطا
protocol.http.BadPathاست.http.BadPath و منبع خطا دارای مقدارtargetباشد، این نشان می دهد که URL سرور پشتیبان دارای یک مسیر نامعتبر است. URL سرور باطن با متغیر جریان
target.urlدر Apigee Edge نشان داده می شود. این خطا معمولاً در صورتی اتفاق میافتد که سعی کنید URL سرور پشتیبان (target.url) را بهصورت پویا با استفاده از هر یک از خطمشیها (در داخل پروکسی/جریان اشتراکگذاری شده) در جریان درخواست هدف بهروزرسانی کنید، به طوری که یک مسیر نامعتبر داشته باشد.با استفاده از یکی از روش های زیر تعیین کنید که آیا متغیر جریان
target.urlواقعاً دارای یک مسیر نامعتبر و منبع مقدار آن است:ردیابی
با استفاده از ابزار Trace
اگر ردی برای این خطا ثبت کرده اید، از مراحلی که در Using Trace tool توضیح داده شده است استفاده کنید.
- بررسی کنید که آیا
target.urlیک مسیر نامعتبر دارد، یعنی اگر با علامت سوال (?) به جای اسلش رو به جلو (/) شروع شود. اگر پاسخ مثبت است، سیاستی را پیدا کنید که مقدار
target.urlرا تغییر داده یا بهروزرسانی کرده تا حاوی یک مسیر نامعتبر باشد.ردیابی نمونه نشان دهنده خط مشی جاوا اسکریپت متغیر جریان
target.urlرا به روز کرد
- در ردیابی نمونه بالا، توجه کنید که خط مشی جاوا اسکریپت مقدار
target.urlرا تغییر داده یا به روز کرده است تا حاوی یک مسیر نامعتبر باشد. - توجه داشته باشید که
target.urlدارای اجزای زیر است:- طرح:
https - مرجع:
mocktarget.apigee.net - مسیر:
?json
مسیر با علامت سوال (
?) به جای اسلش رو به جلو (/) شروع می شود ، بنابراین نامعتبر است. - طرح:
سیاههها
استفاده از گزارشها در سرور لاگ خود
- اگر ردی برای این خطا (یک مشکل متناوب) ندارید، بررسی کنید که آیا اطلاعات مربوط به مقدار متغیر جریان
target.urlرا با استفاده از خطمشیهایی مانند MessageLogging یا ServiceCallout در سرور گزارش خود ثبت کردهاید. - اگر گزارش ها را دارید، آنها را بررسی کنید و
- بررسی کنید که آیا
target.urlمسیر نامعتبری دارد و - ببینید آیا می توانید اطلاعات مربوط به اینکه کدام خط مشی تغییر یافته
target.urlباید حاوی مسیر نامعتبر باشد را تعیین کنید
- بررسی کنید که آیا
پروکسی API
بررسی پروکسی API خراب
اگر ردیابی یا گزارشی برای این خطا ندارید، پروکسی API ناموفق را بررسی کنید تا تعیین کنید که چه چیزی متغیر جریان
target.urlرا تغییر داده یا بهروزرسانی کرده تا حاوی یک مسیر نامعتبر باشد. موارد زیر را بررسی کنید:- خط مشی در پروکسی API
- هر جریان مشترکی که از پروکسی فراخوانی شود
- بررسی کنید که آیا
خط مشی خاصی را به دقت بررسی کنید (به عنوان مثال: AssignMessage یا جاوا اسکریپت) که متغیر جریان
target.urlتغییر می دهد یا به روز می کند و علت به روز رسانیtarget.urlرا برای داشتن یک مسیر نامعتبر مشخص کنید.در اینجا چند نمونه از سیاستها وجود دارد که متغیر جریان
target.urlرا به اشتباه بهروزرسانی میکنند تا حاوی مسیر نامعتبری باشد که منجر به این خطا میشود.نمونه شماره 1
نمونه شماره 1: متغیر
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 Edge500 Internal Server Errorرا باprotocol.http.BadPathکد خطا برمی گرداند.http.BadPath.نمونه شماره 2
نمونه شماره 2: خط مشی جاوا اسکریپت متغیر
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متغیر به روز می شود.urlو مقدارpathمتغیر دیگری که مقدار آن ازrequest.header.Path .اگر به درخواست یا ردیابی واقعی دسترسی دارید، می توانید مقدار واقعی ارسال شده به
request.header.Pathرا تأیید کنید.نمونه درخواست ارسال شده توسط کاربر
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: ?user"
در این مثال، مسیر هدر به عنوان بخشی از درخواست ارسال نمی شود. بنابراین، مقدار
pathمتغیر در خط مشی جاوا اسکریپت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 Edge500 Internal Server Errorباprotocol.http.BadPathکد خطا برمی گرداند.http.BadPath.نمونه شماره 3
نمونه شماره 3: متغیر
target.urlبه روز رسانی خط مشی AssignMessage<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 Edge500 Internal Server Errorرا باprotocol.http.BadPathکد خطا برمی گرداند.http.BadPath.- طرح:
قطعنامه
طبق مشخصات URL RFC 3986، بخش 3: اجزای نحوی ، جزء path مورد نیاز است و همیشه باید با "/" شروع شود. بنابراین برای رفع این مشکل مراحل زیر را دنبال کنید:
- اطمینان حاصل کنید که URL سرور backend که با متغیر جریان
target.urlنشان داده می شود همیشه دارای یک مسیر معتبر است و همیشه با یک اسلش رو به جلو (/) شروع می شود .- در برخی موارد، ممکن است نام منبعی در مسیر نداشته باشید، سپس مطمئن شوید که مسیر حداقل دارای یک اسلش رو به جلو (
/) باشد. - اگر از متغیرهای دیگری برای تعیین مقدار متغیر جریان
target.urlاستفاده میکنید، مطمئن شوید که سایر متغیرها مسیر نامعتبری ندارند. - اگر عملیات رشته ای را برای تعیین مقدار متغیر جریان
target.urlانجام می دهید، مطمئن شوید که نتیجه یا نتیجه عملیات رشته مسیر نامعتبری ندارد.
- در برخی موارد، ممکن است نام منبعی در مسیر نداشته باشید، سپس مطمئن شوید که مسیر حداقل دارای یک اسلش رو به جلو (
در نمونه هایی که در بالا توضیح داده شد، می توانید این مشکل را همانطور که در زیر توضیح داده شده رفع کنید:
نمونه شماره 1
نمونه شماره 1: متغیر
target.urlبه روز رسانی خط مشی جاوا اسکریپتاز یک اسلش رو به جلو (
/) به جای علامت سوال (?) درurlمتغیر برای رفع این مشکل مانند شکل زیر استفاده کنید:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
نمونه شماره 2
نمونه شماره 2: خط مشی جاوا اسکریپت متغیر
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 Policy به روز رسانی متغیر
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 سرور باطن همیشه باید با a شروع شود اسلش رو به جلو (/) طبق مشخصات زیر:مشخصات RFC 3986، بخش 3: اجزای نحوی RFC 3986، بخش 3.3: مسیر اگر همچنان به کمک پشتیبانی Apigee نیاز دارید، به Must collect information diagnostic بروید.
باید اطلاعات تشخیصی را جمع آوری کرد
اگر حتی پس از پیروی از دستورالعملهای بالا، مشکل همچنان ادامه داشت، اطلاعات تشخیصی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط زیست
- نام پروکسی API
- دستور کامل
curlبرای بازتولید500 Internal Server Errorباprotocol.http.BadPathکد خطا استفاده می شود.http.BadPath - فایل ردیابی برای درخواست های API
اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل برای درخواست های ناموفق مشاهده شد
- نام محیط زیست
- بسته پروکسی API
- فایل ردیابی برای درخواست های API
گزارش های دسترسی 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
مراجع