شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
علامت
برنامهی کلاینت، کد وضعیت HTTP 502 Bad Gateway را به همراه کد خطای protocol.http.Response405WithoutAllowHeader به عنوان پاسخی برای فراخوانیهای API دریافت میکند.
پیام خطا
برنامهی کلاینت کد پاسخ زیر را دریافت میکند:
HTTP/1.1 502 Bad Gateway
علاوه بر این، ممکن است پیام خطای زیر را مشاهده کنید:
{
"fault":{
"faultstring":"Received 405 Response without Allow Header",
"detail":{
"errorcode":"protocol.http.Response405WithoutAllowHeader"
}
}
}علل احتمالی
این خطا زمانی رخ میدهد که سرور backend با کد وضعیت 405 Method Not Allowed بدون هدر Allow پاسخ دهد.
طبق مشخصات RFC 7231، بخش 6.5.5: 405 Method Not Allowed ، انتظار میرود که سرور مبدا باید یک فیلد سرآیند Allow را در پاسخ 405 تولید و ارسال کند که حاوی لیستی از روشهای پشتیبانیشده فعلی منبع هدف باشد. در غیر این صورت، Apigee با 502 Bad Gateway و error code protocol.http.Response405WithoutAllowHeader پاسخ میدهد.
| علت | توضیحات | دستورالعملهای عیبیابی قابل اجرا برای |
|---|---|---|
| پاسخ ۴۰۵ بدون هدر Allow از سرور backend | سرور بکاند که درخواست API را پردازش میکند، با کد وضعیت 405 بدون هدر Allow پاسخ میدهد. | کاربران فضای ابری عمومی و خصوصی Edge |
مراحل تشخیص مشترک
برای تشخیص این خطا از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
نظارت بر API
برای تشخیص خطا با استفاده از مانیتورینگ API:
- به عنوان کاربری با نقش مناسب، وارد رابط کاربری Edge شوید.
به سازمانی که میخواهید مشکل را در آن بررسی کنید، مراجعه کنید.

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

- از پنجره Logs ، جزئیات زیر را یادداشت کنید:
- کد وضعیت:
502 - منبع خطا:
target - کد خطا:
protocol.http.Response405WithoutAllowHeader.
- کد وضعیت:
- اگر منبع خطا
targetو کد خطاprotocol.http.Response405WithoutAllowHeaderباشد، نشان میدهد که سرور backend با کد وضعیت405 Method Not Allowedبدون هدرAllowپاسخ داده است.
ابزار ردیابی
برای تشخیص خطا با استفاده از ابزار Trace:
- جلسه ردیابی را فعال کنید و یا
- منتظر بمانید تا خطای
502 Bad Gatewayرخ دهد، یا - اگر میتوانید مشکل را دوباره ایجاد کنید، فراخوانی API را برای ایجاد مشکل انجام دهید - خطای
502 Bad Gateway
- منتظر بمانید تا خطای
مطمئن شوید که گزینهی Show all FlowInfos فعال است:

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

مقدار خطا را از ردیابی یادداشت کنید.
ردیابی نمونه بالا، خطا را با عنوان
Received 405 Response without Allow Headerنشان میدهد. از آنجایی که این خطا توسط Apigee پس از ارسال درخواست به سرور backend ایجاد شده است، نشان میدهد که سرور backend کد وضعیت پاسخ405را بدون هدرAllowارسال کرده است.- در مسیر ردیابی، به مرحله AX (دادههای تحلیلی ثبتشده) بروید و روی آن کلیک کنید.
در پنل Phase Details به پایین اسکرول کنید تا به بخش Error / Response Headers برسید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را مطابق شکل زیر تعیین کنید:

- مقادیر X-Apigee-fault-code و X-Apigee-fault-source را به ترتیب به صورت
protocol.http.Response405WithoutAllowHeaderوtargetمشاهده خواهید کرد که نشان میدهد این خطا به دلیل ارسال کد وضعیت پاسخ405توسط backend بدون هدرAllowایجاد شده است.هدرهای پاسخ ارزش کد خطای X-Apigee protocol.http.Response405WithoutAllowHeaderمنبع گسل X-Apigee target
انجینکس
برای تشخیص خطا با استفاده از گزارشهای دسترسی NGINX:
- اگر شما یک کاربر Private Cloud هستید، میتوانید از گزارشهای دسترسی NGINX برای تعیین اطلاعات کلیدی در مورد خطاهای HTTP
502استفاده کنید. گزارشهای دسترسی NGINX را بررسی کنید:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
که در آن: ORG ، ORG و PORT# با مقادیر واقعی جایگزین شدهاند.
- جستجو کنید تا ببینید آیا در یک دوره زمانی خاص (اگر مشکل در گذشته رخ داده است) خطاهای
502با کد خطاprotocol.http.Response405WithoutAllowHeaderوجود دارد یا خیر، یا اینکه آیا درخواستهایی وجود دارد که هنوز با502با شکست مواجه میشوند. اگر هرگونه خطای
502با کد خطای X-Apigee-fault-code که با مقدارprotocol.http.Response405WithoutAllowHeaderمطابقت دارد، پیدا کردید، مقدار منبع خطای X-Apigee-fault را تعیین کنید.نمونه خطای ۵۰۲ از لاگ دسترسی NGINX:

ورودی نمونه بالا از لاگ دسترسی NGINX دارای مقادیر زیر برای X-Apigee- fault-code و X-Apigee-fault-source است:
هدرهای پاسخ ارزش کد خطای X-Apigee protocol.http.Response405WithoutAllowHeaderمنبع گسل X-Apigee target
علت: پاسخ ۴۰۵ بدون هدر Allow از سرور backend
تشخیص
- کد خطا و منبع خطا را برای
502 Bad Gatewayبا استفاده از API Monitoring، Trace Tool یا گزارشهای دسترسی NGINX همانطور که در مراحل تشخیص مشترک توضیح داده شده است، تعیین کنید. - اگر کد خطا
protocol.http.Response405WithoutAllowHeaderباشد و Fault Source مقدارtargetداشته باشد، این نشان میدهد که سرور backend با کد وضعیت405بدون هدرAllowپاسخ داده است. بنابراین، Apigee با کد خطای502 Bad Gatewayبا کد خطایprotocol.http.Response405WithoutAllowHeaderپاسخ میدهد.
وضوح تصویر
برای حل مشکل از یکی از روشهای زیر استفاده کنید:
سرور بکاند
گزینه شماره ۱: تنظیم سرور Backend برای ارسال کد وضعیت ۴۰۵ با هدر Allow:
اطمینان حاصل کنید که سرور backend همیشه به مشخصات RFC 7231، بخش 6.5.5: 405 Method Not Allowed پایبند است و با درج لیست روشهایی که به عنوان بخشی از سربرگ
Allowمجاز هستند، مطابق شکل زیر، کد وضعیت405را ارسال میکند:Allow: HTTP_METHODS
- برای مثال، اگر سرور backend شما متدهای
GET،POSTوHEADرا مجاز میداند، باید مطمئن شوید که سرآیندAllowشامل آنها به شرح زیر باشد:Allow: GET, POST, HEAD
مدیریت خطا
گزینه شماره ۲: استفاده از مدیریت خطا برای ارسال کد وضعیت ۴۰۵ به همراه هدر Allow از پروکسی API شما:
اگر سرور backend کد وضعیت 405 را بدون هدر Allow برگرداند، میتوانید از مدیریت خطا برای پاسخ دادن با کد وضعیت 405 و هدر Allow از پروکسی API خود به شرح زیر استفاده کنید:
یک پالیسی مانند پالیسی AssignMessage یا پالیسی RaiseFault ایجاد کنید و کد وضعیت را روی
405با هدرAllowو یک پیام سفارشی تنظیم کنید.نمونه سیاست AssignMessage برای ارسال خطای ۴۰۵ با هدر Allow:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
یک
FaultRuleدرTargetEndpointایجاد کنید که به محض دریافت خطای502با کد خطایprotocol.http.Response405WithoutAllowHeader، خطمشی را فراخوانی کند.نمونه پیکربندی TargetEndpoint که FaultRule را نشان میدهد:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>- این تغییرات را در یک نسخه جدید از پروکسی API خود ذخیره کنید و نسخه را مستقر کنید.
- فراخوانیهای API را انجام دهید و با استفاده از هدر
Allowتأیید کنید که کد وضعیت405را دریافت میکنید.
پیکربندی ویژگی
گزینه شماره ۳: پیکربندی ویژگی در پردازشگر پیام برای جلوگیری از بازگشت خطای ۵۰۲ توسط Apigee Edge
- اگر شما یک کاربر Private Cloud هستید، میتوانید ویژگی
HTTP.ignore.allow_header.for.405بهtrueبهروزرسانی کنید تا از ایجاد خطای502Apigee Edge جلوگیری شود، حتی اگر سرور backend با کد وضعیت405بدون هدرAllowبا استفاده از راهنمای نحوهی پیکربندی: پیکربندی هدر ignore allow برای ویژگی ۴۰۵ در Message Processors پاسخ دهد. - اگر کاربر فضای ابری عمومی هستید، لطفاً با پشتیبانی Apigee Edge تماس بگیرید.
مشخصات
Apigee انتظار دارد که پاسخ 405 Method Not Allowed از سرور backend به همراه هدر Allow مطابق مشخصات زیر دریافت شود:
| مشخصات | |
|---|---|
| RFC 7231، بخش 6.5.5: روش 405 مجاز نیست | |
| RFC 7231، بخش 7.4.1: اجازه |
نکات کلیدی قابل توجه
راه حل پیشنهادی این است که سرور backend را طوری تنظیم کنید که کد وضعیت 405 را با هدر Allow ارسال کند و به مشخصات RFC 7231، بخش ۶.۵.۵: روش ۴۰۵ مجاز نیست، پایبند باشید.
اگر هنوز به هرگونه کمکی از پشتیبانی Apigee نیاز دارید، به بخش «باید اطلاعات تشخیصی را جمعآوری کنید» بروید.
باید اطلاعات تشخیصی جمعآوری کند
اگر مشکل حتی پس از پیروی از دستورالعملهای بالا ادامه داشت، اطلاعات تشخیصی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید.
اگر کاربر فضای ابری عمومی هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط
- نام پروکسی API
- دستور
curlکامل که برای بازتولید خطای502 Bad Gatewayبا کد خطایprotocol.http.Response405WithoutAllowHeaderاستفاده میشود. - فایل ردیابی برای درخواستهای API
اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل مشاهده شده برای درخواستهای ناموفق
- نام محیط
- بسته پروکسی API
- فایل ردیابی برای درخواستهای API
گزارشهای دسترسی NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
که در آن: ORG ، ORG و PORT# با مقادیر واقعی جایگزین شدهاند.
- گزارشهای سیستم پردازشگر پیام
/opt/apigee/var/log/edge-message-processor/logs/system.log