מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
תיאור הבעיה
הקריאה ל-API מפורטל המפתחים המשולב נכשלת עם
Unknown Error
או תגובה ריקה
התנסות עם ה-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"
נכשלה והועלתה טעות. - אם כן, עליך לוודא מדיניות CORS של AssignMessage CORS בוצעה או לא הופיעה בשגיאה תהליך התגובה.
- אם לא, זו הסיבה לבעיה.
הסיבה לכך היא שכאשר כל מדיניות שכוללת את הרכיבcontinueOnError="false"
ייכשל, ואז הבקשה תזין את תהליך התגובה לשגיאה. אם אין טיפול מפורש בתקלות תהליך התגובה לשגיאה, ואז תגובת השגיאה המוגדרת כברירת מחדל למדיניות נשלחת בחזרה. לתגובת השגיאה הזו אין כותרות CORS. כתוצאה מכך, הקריאה ל-API מהמפתח המשולב הפורטל נכשל עםUnknown error
.
בצילומי המסך הבאים מוצגת הודעת שגיאה לדוגמה ודוגמה הודעת הצלחה.
דוגמה להודעת שגיאה בחלונית נסו את ה-API הזה בפורטל המשולב ובחלון Trace של שרת ה-proxy:
דוגמה להודעה על הצלחה בחלונית רוצה לנסות את ה-API הזה? בפורטל המשולב ובחלון Trace של שרת ה-proxy:
רזולוציה
- במקום להסתמך על הודעת השגיאה המוגדרת כברירת מחדל, צריך להטמיע את כלל השגיאה כדי לטפל בתגובת השגיאה. כלול הקצאת מדיניות CORS של הודעות עם כותרות מתאימות והפעלה שלה ב FaultRule.
- לפעמים לא ניתן להגדיר כלל שגוי לכל אחד מהם שגיאה; לכן, אפשר להטמיע כלל ברירת מחדל של שגיאות לביצוע מדיניות CORS של AssignMessage:
<?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 במעקב
נראה כך:
*,*
המשמעות היא גם שרת היעד וגם קובעים את הערך של מדיניות ה-CORS של AssignMessage. - מצב כזה יכול לקרות כשמשתמש השתמש
<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 רק בהגדרות של מקום אחד, או הקצאה של מדיניות 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:
- שם הארגון
- שם הסביבה
- שם ה-API של ה-Proxy
- צריך להשלים את פקודת ה-curl שמשמשת לשחזור השגיאה
- קובץ מעקב אחר בקשות ה-API
- פלט התשובה המלאה משרת היעד/שרת הקצה העורפי יחד עם גודל המטען הייעודי (Payload)