מוצג המסמך של 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" } } }
גורמים אפשריים
השגיאה הזו מתקבלת אם שרת הקצה העורפי מגיב בסטטוס 405 Method Not Allowed
בלי הכותרת Allow
.
לפי המפרט
RFC 7231, סעיף 6.5.5: 405 Method Not Allowed, צפוי ששרת המקור
חובה ליצור ולשלוח שדה כותרת Allow
בתשובה 405
שמכילה
של משאב היעד שנתמך כרגע. אם לא, התשובה של Apigee היא
502 Bad Gateway
וקוד השגיאה protocol.http.Response405WithoutAllowHeader
.
סיבה | תיאור | הוראות לפתרון בעיות עבור |
---|---|---|
תגובת 405 ללא כותרת אישור משרת הקצה העורפי | שרת הקצה העורפי שמעבד את בקשת ה-API מגיב עם קוד הסטטוס 405 ללא הכותרת Allow . |
משתמשי Edge בענן הציבורי והפרטי |
שלבי אבחון נפוצים
יש להשתמש באחד מהכלים או השיטות הבאים כדי לאבחן את השגיאה:
מעקב API
כדי לאבחן את השגיאה באמצעות API Monitoring:
- מתחברים לממשק המשתמש של Edge כמשתמש של התפקיד המתאים.
עוברים לארגון שבו רוצים לחקור את הבעיה.
- מנווטים אל ניתוח > מעקב API > לחקור את הדף.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
הציגו את קוד התקלה ביחס ל-Time.
צריך לבחור תא עם קוד השגיאה
protocol.http.Response405WithoutAllowHeader
כפי שמוצג בהמשך:מידע על קוד התקלה
protocol.http.Response405WithoutAllowHeader
מוצגת כפי שמוצג כאן:לוחצים על צפייה ביומנים ומרחיבים את אחת מהבקשות שנכשלו כדי להציג מידע נוסף.
- בחלון יומנים שימו לב לפרטים הבאים:
- קוד סטטוס:
502
- מקור התקלה:
target
- קוד התקלה:
protocol.http.Response405WithoutAllowHeader
.
- קוד סטטוס:
- אם מקור התקלה הוא
target
ו-קוד השגיאה הואprotocol.http.Response405WithoutAllowHeader
, אז זה מציין שהקצה העורפי השרת הגיב עם קוד סטטוס405 Method Not Allowed
ללא הכותרתAllow
.
כלי המעקב
כדי לאבחן את השגיאה באמצעות כלי המעקב:
- מפעילים את
פעילות מעקב
- צריך להמתין עד שהשגיאה
502 Bad Gateway
תתרחש, או - אם הצלחתם לשחזר את הבעיה, בצעו את הקריאה ל-API כדי לשחזר את הבעיה -
שגיאה אחת (
502 Bad Gateway
)
- צריך להמתין עד שהשגיאה
מוודאים שהאפשרות Show all FlowInfos מופעלת:
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- צריך לעבור בין השלבים השונים במעקב ולאתר את מקום הכשל.
השגיאה בדרך כלל מופיעה בתהליך אחרי הבקשה נשלחה לשרת היעד בשלב הבא:
בודקים את ערך השגיאה במעקב.
במעקב הדוגמה שלמעלה מוצגת השגיאה כ-
Received 405 Response without Allow Header
. מכיוון שהשגיאה עולה על ידי Apigee אחרי שהבקשה נשלחה לקצה העורפי שרת, מציין ששרת הקצה העורפי שלח את קוד הסטטוס של תגובת405
בלי הכותרתAllow
.- מנווטים לשלב AX (נתוני Analytics מתועדים) במעקב ולוחצים עליו.
גוללים למטה לקטע כותרות שגיאה / תגובה בדף פרטי השלב. ונקבע את ההגדרות של X-Apigee-fault-code ו-X-Apigee-fault-source כפי שמוצג כאן:
- הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source יוצגו בתור
protocol.http.Response405WithoutAllowHeader
ו-target
בהתאמה, שמציינת שהשגיאה נגרמת כי הקצה העורפי שלח את קוד הסטטוס של התשובה405
בלי הכותרתAllow
.כותרות של תשובות ערך X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
NGINX
כדי לאבחן את השגיאה באמצעות יומני הגישה של NGINX:
- אם אתם משתמשים של ענן פרטי, אתם יכולים להשתמש ביומני הגישה ל-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-source.דוגמה לשגיאה 502 מיומן הגישה ל-NGINX:
הרשומה לדוגמה שלמעלה מיומן הגישה ל-NGINX כוללת את הערכים הבאים עבור X-Apigee- קוד שגיאה ו-X-Apigee-fault-source:
כותרות של תשובות ערך X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
הסיבה: תגובת 405 ללא כותרת 'אפשר' משרת הקצה העורפי
אבחון
- מגדירים את קוד השגיאה ואת מקור התקלה עבור
502 Bad Gateway
באמצעות API Monitoring, כלי מעקב או יומני גישה של NGINX, כמו שמוסבר שלבי האבחון הנפוצים. - אם קוד התקלה הוא
protocol.http.Response405WithoutAllowHeader
וגם הערךtarget
של מקור התקלה מציין שלשרת הקצה העורפי השיב עם קוד סטטוס405
ללא הכותרתAllow
. לכן, Apigee מחזירה502 Bad Gateway
עם קוד שגיאהprotocol.http.Response405WithoutAllowHeader
.
רזולוציה
אפשר להשתמש באחת מהשיטות הבאות כדי לפתור את הבעיה:
שרת עורפי
אפשרות מס' 1: תיקון השרת העורפי כך שישלח קוד סטטוס 405 עם הכותרת Allow:
ודאו ששרת הקצה העורפי תמיד פועל בהתאם למפרט RFC 7231, סעיף 6.5.5: 405 Method Not Allowed ושולח עם הסטטוס
405
על ידי הכללת רשימת השיטות המורשות כחלק מכותרתAllow
כפי שמוצג בהמשך:Allow: HTTP_METHODS
- לדוגמה, אם שרת הקצה העורפי מאפשר
GET
,POST
וHEAD
שיטות, עליך לוודא שהכותרתAllow
מכילה אותם באופן הבא:Allow: GET, POST, HEAD
טיפול בתקלות
אפשרות 2: שימוש בטיפול בכשלים כדי לשלוח קוד סטטוס 405 עם הכותרת Allow מה-API שרת proxy:
אם שרת הקצה העורפי מחזיר את קוד הסטטוס 405
בלי Allow
אפשר להשתמש בטיפול בתקלות כדי להשיב בחזרה עם קוד הסטטוס 405
Allow
מה-Proxy ל-API באופן הבא:
ליצור מדיניות כמו המדיניות של AssignMessage או במדיניות LiftFault ולהגדיר את קוד הסטטוס ל-
405
עם הכותרתAllow
ופרמטר מותאם אישית הודעה.דוגמה למדיניות 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
הגדרה לדוגמה של יעד קצה קצה (TargetEndpoint) שמציגה את FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>
- יש לשמור את השינויים האלו בגרסה חדשה של שרת ה-proxy ל-API ולפרוס את הגרסה.
- צריך לבצע את הקריאות ל-API ולוודא שקיבלת את קוד הסטטוס
405
עם הכותרתAllow
.
הגדרת הנכס
אפשרות מס' 3: הגדרת המאפיין במעבד ההודעות כדי למנוע מ-Apigee Edge חזרה לשגיאה 502
- אם אתם משתמשים בענן פרטי, אתם יכולים לעדכן את הנכס
HTTP.ignore.allow_header.for.405
ל-true
כדי למנוע מ-Apigee Edge: מעלה שגיאה502
, גם אם שרת הקצה העורפי מגיב עם405
קוד הסטטוס בלי הכותרתAllow
, בעזרת המדריך לביצוע פעולות: הגדרה של כותרת ההרשאה להתעלמות עבור מאפיין 405 במעבדי הודעות. - אם את/ה משתמש/ת בענן ציבורי , עליך לפנות לתמיכה של Apigee Edge
מפרט
Apigee מצפה לתגובת 405 Method Not Allowed
משרת הקצה העורפי
עם הכותרת Allow
בהתאם למפרטים הבאים:
מפרט | |
---|---|
RFC 7231, סעיף 6.5.5: 405 Method Not Allowed | |
RFC 7231, סעיף 7.4.1: מותר |
נקודות עיקריות שכדאי לשים לב אליהן
הפתרון המומלץ הוא לתקן את השרת העורפי כך שישלח את קוד הסטטוס 405
עם הכותרת Allow
ולפעול בהתאם למפרט
RFC 7231, סעיף 6.5.5: 405 Method Not Allowed.
אם עדיין דרושה לך עזרה מהתמיכה של Apigee, צריך לעבור אל חובה לאסוף את פרטי האבחון.
חובה לאסוף פרטי אבחון
אם הבעיה נמשכת גם לאחר ביצוע ההוראות שלמעלה, יש לאסוף את הפריטים הבאים את נתוני האבחון, ואז פונים לתמיכה של Apigee Edge.
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם ה-API של ה-Proxy
- צריך להשלים את הפקודה
curl
שמשמשת לשחזור502 Bad Gateway
באמצעות קוד השגיאהprotocol.http.Response405WithoutAllowHeader
- קובץ מעקב אחר בקשות ה-API
אם אתם משתמשים בענן פרטי, עליכם לספק את הפרטים הבאים:
- הודעת שגיאה מלאה שנצפתה בבקשות שנכשלו
- שם הסביבה
- חבילת proxy ל-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