شما در حال مشاهده اسناد 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.BadPath
X-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.BadPath
X-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
مراجع