כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של
Apigee X. מידע
תיאור הבעיה
הקריאה ל-API מפורטל המפתחים המשולב נכשלת עם
Unknown Error
או שהתגובה ריקה בחלונית
Try this API.
הודעות שגיאה
יכול להיות שתופיע תגובה ריקה או את הודעת השגיאה הבאה לגבי בקשות ה-API בפורטל המשולב:
Unknown Error
בכרטיסייה כלים למפתחים > מסוף תופיע השגיאה הבאה:
Access to XMLHTTPRequest at 'API_URL' from origin 'URL_of_Integrated_DevPortal' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
זוהי הודעת שגיאה כללית שמופיעה בכרטיסייה 'כלים למפתחים' > 'מסוף':
גורמים אפשריים
סיבה | התיאור | ההוראות לפתרון בעיות הרלוונטיות עבור |
---|---|---|
אשמת מדיניות שלא טופלה | תגובת השגיאה שמוגדרת כברירת מחדל נשלחת ללא כותרות CORS, אם מדיניות כלשהי נכשלת בתהליך זמן הריצה של בקשת ה-API. | משתמשי Edge Public Cloud |
ערכים מרובים של Access-Control-Allow-Origin | שימוש ב'הוספה' במקום באפשרות 'הגדרה' ב-'הקצאת מדיניות הודעות'. | משתמשי Edge Public Cloud |
הסיבה: תקלת מדיניות לא מטופלת
אבחון
- צריך לוודא שהבעיה מתרחשת רק אם צפויה תגובה שאינה של
2XX
. - במקרים של בקשות שנכשלו, צריך לוודא שיש כללי מדיניות בתהליך הזרימה של שרת ה-proxy.
-
עוקבים אחרי הבקשה ובודקים אם מדיניות עם
continueOnError="false"
נכשלת ומגבירה את הבעיה. - אם כן, עליכם לבדוק אם המדיניות של assignMessage CORS בוצעה או לא במסגרת התהליך של תגובת השגיאה.
- אם לא, זו הסיבה לבעיה.
הסיבה לכך היא שכשמדיניות כלשהי עם הרכיבcontinueOnError="false"
נכשלת, הבקשה נכנסת לתהליך התגובה לשגיאה. אם אין טיפול מפורש בכשלים בתהליך התגובה לשגיאות, תישלח בחזרה תגובת ברירת המחדל שתואמת למדיניות. בתגובה לשגיאה הזו אין כותרות CORS. כתוצאה מכך, הקריאה ל-API מפורטל המפתחים המשולב נכשלת ב-Unknown error
.
בצילומי המסך הבאים מוצגת הודעת שגיאה לדוגמה ודוגמה להודעת הצלחה.
הודעת שגיאה לדוגמה בחלונית Try this API בפורטל המשולב ובחלון Trace של שרת ה-proxy:
דוגמה להודעה מוצלחת בפורטל המשולב Try this API ובחלון Trace של שרת ה-proxy:
רזולוציה
- במקום להסתמך על הודעת השגיאה שמוגדרת כברירת מחדל, צריך להטמיע כלל תקלה כדי לטפל בתגובת השגיאה. צריך לכלול מדיניות של assignMessage CORS בכותרות מתאימות, ולהפעיל אותה ב- FaultRule.
- לפעמים לא ניתן להגדיר כלל ברירת מחדל לכל תקלה. לכן, ניתן להטמיע כלל ברירת מחדל שבעזרתו תוכלו להפעיל את מדיניות assignMessage CORS:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ProxyEndpoint name="proxy-endpoint-name"> <Description/> <!-- Add a default fault rule to add CORS --> <DefaultFaultRule name="fault-rule"> <Step> <Name>add-cors</Name> </Step> </DefaultFaultRule> <FaultRules/> <!-- <Flows /> Rest of the proxy definition --> </ProxyEndpoint>
הסיבה: ערכים מרובים של Access-Control-Allow-Origin
אבחון
- צריך לבדוק את הערך של הכותרת Access-Control-Allow-Origin ב סשן מעקב.
- הכותרת Access-Control-Allow-Origin מאפשרת להגדיר רק ערך אחד. הגדרה של יותר מערך אחד עלולה לגרום לבעיית CORS, והפורטל למפתחים לא יצליח לעבד את התשובות.
- אם הערך של הכותרת Access-Control-Allow-Origin במעקב
נראה כך:
*,*
, המשמעות היא ששרת היעד והמדיניות assignMessage CORS מגדירים את הערך שלו. - מצב כזה יכול לקרות אם משתמש השתמש
ב-
<Add> element
ל-Access-Control-Allow-Origin במדיניות, או אם בקצה העורפי עצמו הוגדרו כמה ערכים.
דוגמה ל-Access-Control-Allow-Origin שווה ל-*,*
:
דוגמה ל-Access-Control-Allow-Origin שווה ל-*
:
דוגמה לשימוש ב-<Add>
:
דוגמה לשימוש ב-<Set>
:
רזולוציה
- הגישה המומלצת היא להשתמש
ב-
<Set> element
(במקום ב-<Add> element
) עבור Access-Control-Allow-Origin, כי מותר רק ערך אחד. - לחלופין, מגדירים את הכותרת Access-Control-Allow-Origin במקום אחד בלבד, במדיניות assignMessage CORS או בשרת היעד.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="set-cors"> <DisplayName>Set CORS</DisplayName> <FaultRules/> <Properties/> <Set> <Headers> <Header name="Access-Control-Allow-Origin">*</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
אם אתם עדיין זקוקים לעזרה מהתמיכה של Apigee, תוכלו לקרוא את המאמר נדרש איסוף פרטי אבחון.
צריך לאסוף פרטי אבחון
עליכם לאסוף את פרטי האבחון הבאים ולאחר מכן לפנות לתמיכה של Apigee Edge:
- שם הארגון
- שם הסביבה
- שם שרת proxy ל-API
- השלמה של פקודת curl המשמשת לשחזור השגיאה
- קובץ מעקב לבקשות API
- יש להשלים את הפלט של התגובה משרת היעד/הקצה העורפי, יחד עם גודל המטען הייעודי (payload)