שגיאה לא ידועה בחלונית 'נסה את ממשק ה-API הזה'

מוצג המסמך של 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

הסיבה: הפרת מדיניות שלא מטופלת

אבחון

  1. חשוב לוודא שהבעיה מתרחשת רק אם צפויה תגובה שאינה 2XX.
  2. אם הבקשה נכשלה, צריך לוודא שיש מדיניות בתהליך של שרת ה-proxy.
  3. עוקבים אחרי הבקשה ובודקים אם המדיניות כוללת הפעולה continueOnError="false" נכשלה והועלתה טעות.
    1. אם כן, עליך לוודא מדיניות CORS של AssignMessage CORS בוצעה או לא הופיעה בשגיאה תהליך התגובה.
    2. אם לא, זו הסיבה לבעיה.
      הסיבה לכך היא שכאשר כל מדיניות שכוללת את הרכיב continueOnError="false" ייכשל, ואז הבקשה תזין את תהליך התגובה לשגיאה. אם אין טיפול מפורש בתקלות תהליך התגובה לשגיאה, ואז תגובת השגיאה המוגדרת כברירת מחדל למדיניות נשלחת בחזרה. לתגובת השגיאה הזו אין כותרות CORS. כתוצאה מכך, הקריאה ל-API מהמפתח המשולב הפורטל נכשל עם Unknown error.

בצילומי המסך הבאים מוצגת הודעת שגיאה לדוגמה ודוגמה הודעת הצלחה.

דוגמה להודעת שגיאה בחלונית נסו את ה-API הזה בפורטל המשולב ובחלון Trace של שרת ה-proxy:

הודעת שגיאה לדוגמה, אפשר ללחוץ כדי להציג תמונה גדולה יותר הודעת שגיאה לדוגמה

דוגמה להודעה על הצלחה בחלונית רוצה לנסות את ה-API הזה? בפורטל המשולב ובחלון Trace של שרת ה-proxy:

דוגמה להודעת הצלחה, לתמונה גדולה יותר אפשר ללחוץ דוגמה להודעה על הצלחה

רזולוציה

  1. במקום להסתמך על הודעת השגיאה המוגדרת כברירת מחדל, צריך להטמיע את כלל השגיאה כדי לטפל בתגובת השגיאה. כלול הקצאת מדיניות CORS של הודעות עם כותרות מתאימות והפעלה שלה ב FaultRule.
  2. לפעמים לא ניתן להגדיר כלל שגוי לכל אחד מהם שגיאה; לכן, אפשר להטמיע כלל ברירת מחדל של שגיאות לביצוע מדיניות 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

אבחון

  1. לבדוק את הערך של הכותרת Access-Control-Allow-Origin ב- פעילות מעקב.
  2. הכותרת Access-Control-Allow-Origin מאפשרת רק ערך אחד יש להגדיר. הגדרה של יותר מערך אחד עלולה לגרום לבעיה ב-CORS לא יתקבלו תשובות בפורטל המפתחים.
  3. אם הערך של הכותרת Access-Control-Allow-Origin במעקב נראה כך:
    *,*
    המשמעות היא גם שרת היעד וגם קובעים את הערך של מדיניות ה-CORS של AssignMessage.
  4. מצב כזה יכול לקרות כשמשתמש השתמש <Add> element עבור Access-Control-Allow-Origin במסגרת או שקצה העורפי עצמו מגדיר כמה ערכים.

דוגמה ל-Access-Control-Allow-Origin שווה ל-*,*:

דוגמה לערכים מרובים, צריך ללחוץ כדי להציג תמונה גדולה יותר דוגמה לערכים מרובים

דוגמה ל-Access-Control-Allow-Origin שווה ל-*:

דוגמה לערך יחיד שנעשה בו שימוש, קליק לתמונה גדולה יותר דוגמה לערך יחיד שנעשה בו שימוש

דוגמה לשימוש ב-<Add>:

דוגמה באמצעות הוספה, לחץ כדי להציג תמונה גדולה יותר דוגמה לשימוש בתכונה &#39;הוספה&#39;

דוגמה לשימוש ב-<Set>:

לדוגמה באמצעות &#39;הגדרה&#39;, צריך ללחוץ כדי להציג תמונה גדולה יותר דוגמה באמצעות ההגדרה

רזולוציה

  1. הגישה המומלצת היא להשתמש <Set> element (במקום <Add> element) עבור Access-Control-Allow-Origin בתור מותר להשתמש בערך אחד בלבד.
  2. לחלופין, מגדירים את הכותרת 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)