כרגע מוצג התיעוד של 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 UI כמשתמשים עם תפקיד מתאים.
עוברים לארגון שבו רוצים לבדוק את הבעיה.
- עוברים לדף ניתוח > API Monitoring > חקירה.
- בוחרים את מסגרת הזמן הספציפית שבה הבחנתם בשגיאות.
יש להציב את קוד השגיאה ביחס ל-Time.
בוחרים תא שמכיל את קוד השגיאה
protocol.http.Response405WithoutAllowHeader
, כמו שמוצג בהמשך:מידע על קוד התקלה
protocol.http.Response405WithoutAllowHeader
מוצג באופן שמוצג למטה:כדי להציג מידע נוסף, לוחצים על הצגת היומנים ומרחיבים את אחת מהבקשות שנכשלו.
- בחלון Logs, שימו לב לפרטים הבאים:
- קוד סטטוס:
502
- מקור התקלה:
target
- קוד תקלה:
protocol.http.Response405WithoutAllowHeader
.
- קוד סטטוס:
- אם Fault Source הוא
target
ו-Fault Code (קוד תקלה) הואprotocol.http.Response405WithoutAllowHeader
, אז השרת העורפי הגיב עם קוד הסטטוס405 Method Not Allowed
בלי הכותרתAllow
.
כלי המעקב
כדי לאבחן את השגיאה באמצעות כלי המעקב:
- מפעילים את
סשן המעקב ואז
- להמתין עד שהשגיאה
502 Bad Gateway
תתרחש, או - אם הצלחת לשחזר את הבעיה, יש לבצע את הקריאה ל-API כדי לשחזר את הבעיה –
שגיאה אחת (
502 Bad Gateway
)
- להמתין עד שהשגיאה
יש לוודא שהאפשרות Show allflowInfos מופעלת:
- בוחרים אחת מהבקשות שנכשלו ובודקים את המעקב.
- אפשר לנווט בשלבים השונים של המעקב ולאתר את המיקום שבו אירעה הכשל.
השגיאה תוצג בדרך כלל ברצף אחרי השלב הבקשה שנשלחה לשרת היעד כפי שמוצג כאן:
יש לשים לב לערך השגיאה מתוך המעקב.
המעקב לדוגמה שלמעלה מציג את השגיאה כ-
Received 405 Response without Allow Header
. מכיוון ש-Apigee העלתה את השגיאה אחרי שהבקשה נשלחה לשרת הקצה העורפי, זה סימן לכך שהשרת העורפי שלח את קוד סטטוס התגובה405
ללא הכותרתAllow
.- מנווטים לשלב AX (רישום נתונים ב-Analytics) במעקב ולוחצים עליו.
גוללים למטה לקטע Error / Response Headers בחלונית שלב הפרטים ומוצאים את הערכים של X-Apigee-fault-code ו-X-Apigee-fault-source.
- הערכים של X-Apigee-fault-code ושל X-Apigee-fault-source יופיעו כ-
protocol.http.Response405WithoutAllowHeader
וגםtarget
בהתאמה, כדי לציין שהשגיאה הזו נגרמת כי הקצה העורפי שלח את קוד סטטוס התגובה405
ללא הכותרתAllow
.כותרות תגובה Value 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- fault-code ו-X-Apigee-fault-source:
כותרות תגובה Value X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
הסיבה: תגובה 405 בלי הרשאת כותרת משרת קצה עורפי
אבחון
- קובעים את קוד ה-Fault ואת Fault Source (מקור התקלה) של
502 Bad Gateway
באמצעות API Monitoring, כלי המעקב או יומני גישה של NGINX, כמו שמוסבר בשלבים הנפוצים לאבחון. - אם קוד התקלה הוא
protocol.http.Response405WithoutAllowHeader
והערך 'מקור התקלה' הואtarget
, פירוש הדבר הוא שהשרת הקצה העורפי הגיב עם קוד סטטוס405
ללא הכותרתAllow
. לכן, Apigee מחזירה את התשובה502 Bad Gateway
עם קוד השגיאהprotocol.http.Response405WithoutAllowHeader
.
רזולוציה
יש להשתמש באחת מהשיטות הבאות כדי לפתור את הבעיה:
שרת קצה עורפי
אפשרות מס' 1: תיקון השרת בקצה העורפי כך שישלח קוד סטטוס 405 עם הכותרת 'אישור':
מוודאים ששרת הקצה העורפי פועל תמיד בהתאם למפרט RFC 7231, סעיף 6.5.5: 405 Method Not Allowed ושולח עם קוד הסטטוס
405
. לשם כך, יש לכלול את רשימת השיטות המותרות כחלק מהכותרתAllow
, כפי שמוצג בהמשך:Allow: HTTP_METHODS
- לדוגמה, אם שרת הקצה העורפי מאפשר שיטות
GET
,POST
ו-HEAD
, צריך לוודא שהכותרתAllow
מכילה אותן באופן הבא:Allow: GET, POST, HEAD
טיפול בכשלים
אפשרות מס' 2: שימוש ב'טיפול ב-Fault' כדי לשלוח קוד סטטוס 405 עם הכותרת 'אישור' משרת ה-API של ה-API:
אם שרת הקצה העורפי מחזיר את קוד הסטטוס 405
ללא הכותרת Allow
, אפשר להשתמש בטיפול בכשלים כדי להגיב באמצעות קוד הסטטוס 405
והכותרת Allow
משרת ה-API שלכם באופן הבא:
יוצרים מדיניות כמו assignMessage או RaiseFault, ומגדירים את קוד הסטטוס ל-
405
עם הכותרתAllow
והודעה בהתאמה אישית.דוגמה למדיניות הקצאה לשליחת הודעת שגיאה 405 עם כותרת ההרשאה:
<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 במעבדי הודעות. - ל משתמשים ב-Public Cloud יש לפנות לתמיכה של Apigee Edge
מפרט
Apigee מצפה לתגובה 405 Method Not Allowed
משרת הקצה העורפי עם הכותרת Allow
בהתאם למפרטים הבאים:
מפרט | |
---|---|
RFC 7231, סעיף 6.5.5: Method Not Allowed | |
RFC 7231, סעיף 7.4.1: אישור |
נקודות עיקריות שכדאי לשים לב אליהן
הפתרון המומלץ הוא לתקן את שרת הקצה העורפי כך שישלח את קוד הסטטוס 405
עם הכותרת Allow
ולפעול בהתאם למפרט
RFC 7231, סעיף 6.5.5: 405 Method Not Allowed.
אם עדיין דרושה לכם עזרה מהתמיכה של Apigee, כדאי לעיין במאמר צריך לאסוף פרטי אבחון.
צריך לאסוף פרטי אבחון
אם הבעיה נמשכת גם אחרי שביצעתם את ההוראות שלמעלה, עליכם לאסוף את פרטי האבחון הבאים, ולאחר מכן לפנות לתמיכה של Apigee Edge.
אם אתם משתמשים ב-Public Cloud, עליכם לספק את הפרטים הבאים:
- שם הארגון
- שם הסביבה
- שם שרת proxy ל-API
- משלימים את פקודת
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