شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
علامت
برنامه سرویس گیرنده کد وضعیت HTTP 502 Bad Gateway
را با protocol.http.Response405WithoutAllowHeader
کد خطا دریافت می کند.http.Response405WithoutAllowHeader به عنوان پاسخی برای تماس های API.
پیغام خطا
برنامه مشتری کد پاسخ زیر را دریافت می کند:
HTTP/1.1 502 Bad Gateway
علاوه بر این، ممکن است پیغام خطای زیر را مشاهده کنید:
{ "fault":{ "faultstring":"Received 405 Response without Allow Header", "detail":{ "errorcode":"protocol.http.Response405WithoutAllowHeader" } } }
علل احتمالی
این خطا در صورتی رخ می دهد که سرور باطن با کد وضعیت 405 Method Not Allowed
بدون هدر Allow
پاسخ دهد.
طبق مشخصات RFC 7231، بخش 6.5.5: روش 405 مجاز نیست ، انتظار می رود که سرور مبدا باید یک فیلد هدر Allow
را در پاسخ 405
ایجاد و ارسال کند که حاوی لیستی از روش های پشتیبانی شده در حال حاضر منبع هدف است. اگر نه، Apigee با 502 Bad Gateway
و protocol.http.Response405WithoutAllowHeader
کد خطا پاسخ می دهد.http.Response405WithoutAllowHeader.
علت | توضیحات | دستورالعمل های عیب یابی قابل اجرا برای |
---|---|---|
پاسخ 405 بدون اجازه هدر از سرور باطن | سرور باطنی که درخواست API را پردازش می کند با کد وضعیت 405 بدون هدر Allow پاسخ می دهد. | کاربران Edge Public و Private Cloud |
مراحل تشخیص رایج
برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:
مانیتورینگ API
برای تشخیص خطا با استفاده از API Monitoring:
- به عنوان کاربر با نقش مناسب وارد رابط کاربری Edge شوید.
به سازمانی که میخواهید در آن موضوع را بررسی کنید بروید.
- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
کد خطا را در برابر زمان ترسیم کنید.
سلولی را انتخاب کنید که دارای
protocol.http.Response405WithoutAllowHeader
کد خطا است.http.Response405WithoutAllowHeader مانند شکل زیر:اطلاعات مربوط به
protocol.http.Response405WithoutAllowHeader
کد خطا.http.Response405WithoutAllowHeader مطابق شکل زیر نمایش داده می شود:روی View logs کلیک کنید و یکی از درخواست های ناموفق را برای مشاهده اطلاعات بیشتر گسترش دهید.
- از پنجره Logs به جزئیات زیر توجه کنید:
- کد وضعیت:
502
- منبع خطا:
target
- کد خطا:
protocol.http.Response405WithoutAllowHeader
.
- کد وضعیت:
- اگر منبع خطا
target
است و کد خطاprotocol.http.Response405WithoutAllowHeader
است.http.Response405WithoutAllowHeader، پس این نشان میدهد که سرور باطن با کد وضعیت405 Method Not Allowed
بدون هدرAllow
پاسخ داده است.
ابزار ردیابی
برای تشخیص خطا با استفاده از ابزار Trace:
- جلسه ردیابی و یکی را فعال کنید
- صبر کنید تا خطای
502 Bad Gateway
رخ دهد یا - اگر میتوانید مشکل را بازتولید کنید، با API تماس بگیرید تا مشکل تکرار شود - خطای
502 Bad Gateway
- صبر کنید تا خطای
اطمینان حاصل کنید که نمایش همه FlowInfos فعال است:
- یکی از درخواست های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
- در مراحل مختلف ردیابی پیمایش کنید و محل وقوع شکست را پیدا کنید.
خطا را معمولاً در یک جریان پس از ارسال درخواست به سرور هدف، مطابق شکل زیر خواهید دید:
به مقدار خطا از ردیابی توجه کنید.
ردیابی نمونه بالا خطا را به صورت
Received 405 Response without Allow Header
نشان می دهد. از آنجایی که این خطا توسط Apigee پس از ارسال درخواست به سرور باطن مطرح می شود، نشان می دهد که سرور باطن کد وضعیت پاسخ405
را بدون هدرAllow
ارسال کرده است.- در Trace به فاز AX (Analytics Data Recorded) بروید و روی آن کلیک کنید.
به قسمت Error / Response Headers در پانل جزئیات فاز بروید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را مطابق شکل زیر تعیین کنید:
- مقادیر X-Apigee-fault-code و X-Apigee-fault-source را
Allow
target
به عنوانprotocol.http.Response405WithoutAllowHeader
مشاهده خواهید کرد405
.سرصفحه های پاسخ ارزش X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
NGINX
برای تشخیص خطا با استفاده از گزارش های دسترسی 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
کد خطا وجود دارد.http.Response405WithoutAllowHeader در طول مدت زمان مشخص (اگر مشکل در گذشته اتفاق افتاده باشد) یا اینکه آیا درخواست هایی هنوز با502
ناموفق هستند. اگر هر گونه خطای
502
با کد X-Apigee-fault-code مطابق با مقدارprotocol.http.Response405WithoutAllowHeader
پیدا کردید، سپس مقدار X-Apigee-fault-source را تعیین کنید.نمونه خطای 502 از گزارش دسترسی NGINX:
ورودی نمونه بالا از گزارش دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
سرصفحه های پاسخ ارزش X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
علت: پاسخ 405 بدون اجازه دادن به هدر از سرور باطن
تشخیص
- کد خطا و منبع خطا را برای
502 Bad Gateway
با استفاده از API Monitoring، Trace Tool یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید. - اگر کد خطا
protocol.http.Response405WithoutAllowHeader
است.http.Response405WithoutAllowHeader و منبع خطا دارای مقدارtarget
باشد، این نشان می دهد که سرور باطن با کد وضعیت405
بدون هدرAllow
پاسخ داده است. بنابراین، Apigee با502 Bad Gateway
باprotocol.http.Response405WithoutAllowHeader
کد خطا پاسخ می دهد.http.Response405WithoutAllowHeader.
قطعنامه
برای حل مشکل از یکی از روش های زیر استفاده کنید:
سرور Backend
گزینه شماره 1: سرور Backend را برای ارسال کد وضعیت 405 با هدر Allow رفع کنید:
اطمینان حاصل کنید که سرور Backend همیشه به مشخصات RFC 7231، بخش 6.5.5: 405 Method Not Allowed پایبند است و با درج لیست روش هایی که به عنوان بخشی از هدر
Allow
مجاز هستند، مطابق شکل زیر، کد وضعیت405
را ارسال می کند:Allow: HTTP_METHODS
- به عنوان مثال، اگر سرور باطن شما متدهای
GET
،POST
وHEAD
را مجاز میکند، باید مطمئن شوید که هدرAllow
آنها را به صورت زیر در بر دارد:Allow: GET, POST, HEAD
رسیدگی به خطا
گزینه شماره 2: از Fault Handling برای ارسال کد وضعیت 405 با هدر Allow از پروکسی API خود استفاده کنید:
اگر سرور پشتیبان کد وضعیت 405
را بدون هدر Allow
برگرداند، می توانید از مدیریت خطا برای پاسخ دادن با کد وضعیت 405
و هدر Allow
از پروکسی API خود به صورت زیر استفاده کنید:
یک خط مشی مانند خط مشی AssignMessage یا سیاست RaiseFault ایجاد کنید و کد وضعیت را با عنوان
Allow
و یک پیام سفارشی روی405
تنظیم کنید.نمونه خط مشی AssignMessage برای ارسال 405 با هدر 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
کد خطا، خط مشی را فراخوانی می کند.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 را برقرار کنید و تأیید کنید که کد وضعیت
405
را با هدرAllow
دریافت میکنید.
پیکربندی ویژگی
گزینه شماره 3: ویژگی را در Message Processor پیکربندی کنید تا Apigee Edge از بازگشت خطای 502 جلوگیری کند.
- اگر کاربر Private Cloud هستید، میتوانید ویژگی
HTTP.ignore.allow_header.for.405
را بهtrue
بهروزرسانی کنید تا از ایجاد خطای502
توسط Apigee Edge جلوگیری کنید، حتی اگر سرور backend با کد وضعیت405
بدون هدرAllow
با استفاده از راهنمای نحوه انجام: پیکربندی هدر ignore allow برای ویژگی 405 در پردازشگرهای پیام . - اگر کاربر Public Cloud هستید، لطفاً با پشتیبانی Apigee Edge تماس بگیرید
مشخصات
Apigee انتظار پاسخ 405 Method Not Allowed
از سرور backend به همراه هدر Allow
مطابق مشخصات زیر دارد:
مشخصات | |
---|---|
RFC 7231، بخش 6.5.5: روش 405 مجاز نیست | |
RFC 7231، بخش 7.4.1: اجازه دهید |
نکات کلیدی قابل توجه
راه حل پیشنهادی این است که سرور باطن را تعمیر کنید تا کد وضعیت 405
را با هدر Allow
ارسال کند و به مشخصات RFC 7231، بخش 6.5.5: 405 Method Not Allowed پایبند باشد.
اگر همچنان به کمک پشتیبانی Apigee نیاز دارید، به Must collect information diagnostic بروید.
باید اطلاعات تشخیصی را جمع آوری کرد
اگر حتی پس از پیروی از دستورالعملهای بالا، مشکل همچنان ادامه داشت، اطلاعات تشخیصی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید.
اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط زیست
- نام پروکسی API
- دستور کامل
curl
برای بازتولید502 Bad Gateway
باprotocol.http.Response405WithoutAllowHeader
کد خطا استفاده می شود.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