קטלוג שגיאות בזמן ריצה

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

שגיאות ב-Apigee

כשבקשות API מבוצעות דרך Apigee, הרכיבים Routers ו-Message Processors של Apigee, או שרתי הקצה העורפי, יכולים להחזיר שגיאות לאפליקציות הלקוח.

שגיאות ממעבד ההודעות

מעבד ההודעות הוא רכיב הליבה של Apigee שמעבד את המדיניות ומתקשר עם שרתי הקצה העורפי. הפונקציה יכולה להחזיר שגיאות אם היא מזהה בעיות כמו:

  • בעיות בקישוריות לרשת, כשלים בלחיצת יד של TLS, חוסר זמינות של שרת עורפי, חוסר תגובה במהלך תקשורת עם השרת העורפי
  • כשלים במהלך ביצוע המדיניות
  • כותרות HTTP לא תקינות, קידוד לא תקין, נתיב לא תקין, אי-עמידה במפרטי HTTP, חריגה ממגבלות המוצר וכו':
    • עם בקשת HTTP שנשלחת על ידי אפליקציות הלקוח
    • או

    • עם תגובת HTTP שנשלחה על ידי שרת הקצה העורפי
  • ועוד הרבה יותר

דוגמה לשגיאה ממעבד ההודעות

מעבד הבקשות תמיד מחזיר קוד סטטוס של HTTP ואחריו הודעת שגיאה יחד עם קוד שגיאה בפורמט JSON, כמו שמוצג בהמשך:

אפליקציית הלקוח מקבלת קוד תגובה כמו בדוגמה הבאה:

  HTTP/1.1 504 Gateway Timeout

תגובת שגיאה ממעבד ההודעות מופיעה בפורמט הבא:

{
  "fault": {
    "faultstring": "Gateway Timeout",
    "detail": {
      "errorcode": "messaging.adaptors.http.flow.GatewayTimeout"
      "reason": "TARGET_READ_TIMEOUT"
    }
  }
}

תיאור השדות בתגובה לשגיאה:

שדה תיאור
faultstring מכילה את הודעת השגיאה שמתארת את הסיבה האפשרית לשגיאה
errorcode קוד השגיאה (נקרא גם קוד תקלה) שמשויך לשגיאה
reason כוללת הודעה שמציינת את הסיבה האפשרית לשגיאה

קטלוג שגיאות בזמן ריצה

בקטלוג הזה מפורטים קודי שגיאות זמן הריצה שאינם קשורים למדיניות, שמוחזרים על ידי רכיב Apigee Message Processor. (מידע על שגיאות זמן ריצה שספציפיות למדיניות מסוימת מופיע בקטעים על שגיאות זמן ריצה בדפי המדיניות הספציפיים, כמו שגיאות זמן ריצה במדיניות PublishMessage).

הקטלוג הזה כולל את הפרטים הבאים לגבי כל קוד שגיאה:

  • קוד סטטוס של HTTP
  • הודעת השגיאה
  • הסיבה לשגיאה (לא בכל הודעות השגיאה מוצגת reason)
  • סיבות אפשריות לשגיאה
  • כל המפרטים הרלוונטיים של HTTP ו/או מגבלות המוצר
  • ספרי הפעלה וסרטונים עם הוראות לאבחון הגורם לשגיאה ופתרונות יעילים שאפשר ליישם כדי לפתור את השגיאה בעצמכם (אם יש כאלה)
  • פתרון שאפשר ליישם כדי לפתור את השגיאה בעצמכם

הדוח כולל את קטגוריות קודי השגיאה הבאות:

אפשר להשתמש בתיבת החיפוש שבהמשך כדי לסנן את הטבלה ולהציג את המידע שלמעלה לגבי קוד שגיאה ספציפי. אפשר לחפש את קוד הסטטוס או כל תוכן בשדה כלשהו בטבלה.

קוד שגיאה תיאור תיקון

flow.*

flow.APITimedOut

  • קוד סטטוס של HTTP:
504 Gateway Timeout
  • הודעת שגיאה:
API timed out
  • סיבה אפשרית:

השגיאה הזו מתרחשת אם:

  • השרת העורפי לא מגיב במהלך תקופת הזמן הקצובה שהוגדרה על ידי המאפיין api.timeout עבור ה-API Proxy הספציפי.
  • הפעלה של מדיניות נמשכת זמן רב בגלל פעולות שדורשות הרבה משאבי מחשוב, עומס גבוה או ביצועים נמוכים.

תיקון

כדי לאבחן ולפתור את הבעיה, אפשר לעיין במדריך 504 Gateway timeout - Target read timeout.

flow.SharedFlowNotFound

  • קוד סטטוס של HTTP:
500 Internal Server Error
  • הודעת שגיאה:
Shared Flow {shared_flow_name} not found
  • סיבה אפשרית:

השגיאה הזו מתרחשת אם הזרימה הספציפית ששותפה:

  • לא קיים
  • או

  • קיים אבל לא נפרס

תיקון

כדי לאבחן את הבעיה ולפתור אותה, אפשר לעיין בשגיאות זמן ריצה במדיניות FlowCallout.

messaging.adaptors.http.flow

messaging.adaptors.http.flow.DecompressionFailureAtRequest

  • קוד סטטוס של HTTP:
400 Bad Request
  • הודעת שגיאה:
Decompression failure at request
  • הסיבה:

CLIENT_READ_CONTENT_NOT_IN_GZIP_FORMAT

  • סיבה אפשרית:

השגיאה הזו מתרחשת רק אם:

  • הקידוד שצוין בכותרת בקשת ה-HTTP‏ Content-Encoding הוא תקף ונתמך על ידי Apigee,
  • BUT

  • פורמט המטען הייעודי (payload) שנשלח על ידי הלקוח כחלק מבקשת ה-HTTP לא תואם לפורמט הקידוד שצוין בכותרת Content-Encoding

messaging.adaptors.http.flow.DecompressionFailureAtResponse

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Decompression failure at response
  • הסיבה:

TARGET_READ_CONTENT_NOT_IN_GZIP_FORMAT

TARGET_READ_INCORRECT_HEADER_CHECK

  • סיבה אפשרית:

השגיאה הזו מתרחשת רק אם:

  • הקידוד שצוין בכותרת תגובת ה-HTTP של השרת העורפי או שרת היעד Content-Encoding הוא תקין ונתמך על ידי Apigee,
  • BUT

  • פורמט המטען הייעודי (payload) שנשלח על ידי השרת העורפי או שרת היעד כחלק מתגובת ה-HTTP לא תואם לפורמט הקידוד שצוין בכותרת Content-Encoding

messaging.adaptors.http.flow.ErrorResponseCode

  • קוד סטטוס של HTTP:
500

  • הודעת שגיאה:
הודעת השגיאה והפורמט שלה יכולים להשתנות בהתאם להטמעה של שרת הקצה העורפי.
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם שרת הקצה העורפי מגיב ל-Apigee עם קוד סטטוס 500.
  • קוד סטטוס של HTTP:
503
  • הודעת שגיאה:
הודעת השגיאה והפורמט שלה יכולים להשתנות בהתאם להטמעה של שרת הקצה העורפי.
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם שרת הקצה העורפי מגיב ל-Apigee עם קוד סטטוס 503.
  • קוד סטטוס של HTTP:
504
  • הודעת שגיאה:
הודעת השגיאה והפורמט שלה יכולים להשתנות בהתאם להטמעה של שרת הקצה העורפי.
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם שרת הקצה העורפי מגיב ל-Apigee עם קוד סטטוס 504.

הערה: קוד השגיאה messaging.adaptors.http.flow.ErrorResponseCode לא מוחזר כחלק מהודעת השגיאה שנשלחת לאפליקציות הלקוח. הסיבה לכך היא שקוד השגיאה הזה מוגדר על ידי Apigee בכל פעם ששרת הקצה העורפי מגיב עם שגיאה ועם קודי הסטטוס 4XX או 5XX. אפשר לראות את קוד השגיאה הזה בכלי למעקב אחר API או במסד נתונים של ניתוח נתונים.

messaging.adaptors.http.flow.GatewayTimeout

  • קוד סטטוס של HTTP:
504 Gateway Timeout
  • הודעת שגיאה:
Gateway Timeout
  • הסיבה:
TARGET_READ_TIMEOUT
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם שרת הקצה העורפי לא מגיב בחזרה למעבד ההודעות של Apigee במהלך הזמן הקצוב לתפוגה של קלט/פלט שהוגדר במעבד ההודעות.

תיקון

כדי לאבחן ולפתור את הבעיה, אפשר לעיין במדריך בנושא 504 Gateway timeout - Target read timeout.

messaging.adaptors.http.flow.InternalServerError

  • קוד סטטוס של HTTP:
500 Internal Server Error
  • הודעת שגיאה:
Internal server error at backend
  • הסיבה:
SERVER_ERROR
  • סיבה אפשרית:
השגיאה הזו מתרחשת באחד מהתרחישים הבאים:
  1. אפליקציית ה-Backend נתקלה בחריגה או בשגיאה שלא טופלו במהלך עיבוד הבקשה מ-Apigee. הסיבה לכך יכולה להיות בעיות כמו לוגיקה פגומה, קלט לא צפוי או בעיות אחרות בזמן הריצה בקוד האפליקציה.
  2. יכול להיות שהשרת העורפי לא הצליח להתחבר למסד הנתונים שלו, או ששאילתת מסד נתונים נכשלה. הסיבות לכך יכולות להיות בעיות בחיבור לרשת, פרטי כניסה שגויים למסד הנתונים, השבתה של שרת מסד הנתונים או בעיות בסכימת מסד הנתונים או בנתונים.
  3. אם שרת הקצה העורפי שלכם תלוי בשירותים פנימיים או חיצוניים אחרים, כמו ממשקי API, תורים של הודעות או מערכות שמירה במטמון, כשל באחת מהתלויות האלה עלול לגרום לו להחזיר שגיאה 500 ל-Apigee. יכול להיות שהקצה העורפי לא יוכל לתקשר עם השירות התלוי או יקבל ממנו תגובות שגיאה.
  4. יכול להיות שהשרת העורפי עמוס מדי בגלל תנועת גולשים גבוהה, זיכרון לא מספיק (RAM), שימוש מוגזם במעבד או נפח אחסון נמוך בדיסק. אם אין לשרת מספיק משאבים, הוא לא יכול לעבד בקשות ומחזיר שגיאת 500.
  5. הגדרות שגויות בשרת העורפי עלולות לגרום לשגיאות בלתי צפויות במהלך עיבוד הבקשה. זה כולל בעיות בהגדרות השרת, בהגדרות האפליקציה או בהגדרות הפריסה.
  6. יכול להיות שיש באג בסיסי בקוד אפליקציית ה-Backend שמופעל על ידי הבקשה הספציפית מ-Apigee. יכול להיות שהבאגים האלה לא יופיעו בנסיבות רגילות, אבל הם יופיעו בדפוסי בקשות או בנתונים מסוימים.

messaging.adaptors.http.flow.LengthRequired

  • קוד סטטוס של HTTP:
411 Length Required
  • הודעת שגיאה:
'Content-Length' is missing
  • הסיבה:
CLIENT_REQUEST_CONTENT_LENGTH_REQUIRED
  • סיבה אפשרית:

השגיאה הזו מתרחשת אם כותרת Content-Length לא מועברת על ידי אפליקציית הלקוח כחלק מבקשות HTTP POST ו-PUT שנשלחות אל Apigee.

הערה: אי אפשר לתעד את הבקשות שנכשלות עם השגיאה הזו בכלי Trace, כי מעבד ההודעות מבצע את האימות הזה בשלב מוקדם מאוד, הרבה לפני עיבוד הבקשה והפעלת מדיניות כלשהי ב-API Proxy.

  • מפרט HTTP:
RFC Section 3.3.2: Content-Length

תיקון

כדי לפתור את השגיאה, מבצעים את השלבים הבאים:

  1. מוודאים שאפליקציית הלקוח תמיד מעבירה את הכותרת Content-Length כחלק מבקשות ה-HTTP POST ו-PUT שנשלחות אל Apigee. לדוגמה:

    curl -X POST https://HOSTALIAS/PATH -d '{"name": "abc"}' -H "Content-Length: 15"
    
  2. גם אם מעבירים מטען ייעודי (payload) ריק עם בקשות POST ו-PUT, צריך לוודא שהכותרת Content-Length: 0 מועברת. לדוגמה:

    curl -X POST https://HOSTALIAS/PATH -H "Content-Length: 0"
    

messaging.adaptors.http.flow.NoActiveTargets

  • קוד סטטוס של HTTP:
503 Service Unavailable
  • הודעת שגיאה:
The Service is temporarily unavailable
  • הסיבה:

TARGET_HEALTHCHECK_CONNECT_TIMEOUT

TARGET_HEALTHCHECK_CONNECTION_REFUSED

TARGET_HEALTHCHECK_HTTPS_REQUEST_OVER_HTTP

TARGET_HEALTHCHECK_UNEXPECTED_EOF

  • סיבה אפשרית:

השגיאה הזו מתרחשת באחד מהתרחישים הבאים, אם משתמשים ב- TargetServer ב-Apigee:

  1. פענוח ה-DNS השגוי של מארח השרת העורפי על ידי שרת הרשאות מותאם אישית הוביל לכתובות IP שגויות, וכתוצאה מכך לשגיאות בחיבור.
  2. שגיאות שקשורות לזמן קצוב לתפוגה של החיבור בגלל:
    1. הגבלת חומת האש בשרת הקצה העורפי מונעת מ-Apigee להתחבר לשרת הקצה העורפי.
    2. בעיות בקישוריות לרשת בין Apigee לבין שרת קצה עורפי.
  3. המארח שצוין ב-TargetServer שגוי או מכיל תווים לא רצויים (כמו רווח).
השגיאה הזו יכולה להתרחש גם אם בדיקות התקינות שהוגדרו למעקב אחרי בדיקת התקינות של שרתי היעד נכשלות.

messaging.adaptors.http.flow.RequestTimeOut

  • קוד סטטוס של HTTP:
408 Request Timeout
  • הודעת שגיאה:
Request timed out
  • הסיבה:
CLIENT_READ_TIMEOUT
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם מעבד הבקשות של Apigee לא מקבל את מטען הבקשה מאפליקציית הלקוח במהלך פרק הזמן של פסק הזמן לקלט/פלט שהוגדר ברכיב של מעבד הבקשות.

תיקון

מוודאים שאפליקציית הלקוח שולחת את מטען הבקשה (payload) במהלך פרק הזמן הקצוב לתפוקה/קלט שהוגדר ברכיב Message Processor של Apigee.

messaging.adaptors.http.flow.ServiceUnavailable

  • קוד סטטוס של HTTP:
503 Service Unavailable
  • הודעת שגיאה:
The Service is temporarily unavailable
  • הסיבה:

TARGET_CONNECT_TIMEOUT

TARGET_WRITE_BROKEN_PIPE

TARGET_WRITE_CONNECTION_RESET_BY_PEER

TARGET_CONNECT_CONNECTION_REFUSED

  • סיבה אפשרית:

השגיאה הזו מתרחשת באחד מהתרחישים הבאים:

  1. התרגום השגוי של פענוח DNS של מארח השרת העורפי על ידי שרת הרשאות מותאם אישית הוביל לכתובות IP שגויות, וכתוצאה מכך לשגיאות בחיבור.
  2. שגיאות של זמן קצוב לתפוגה של חיבור בגלל:
    1. הגבלת חומת האש בשרת הקצה העורפי מונעת מ-Apigee להתחבר לשרת הקצה העורפי.
    2. בעיות בקישוריות לרשת בין Apigee לבין שרת קצה עורפי.
  3. המארח של שרת היעד שצוין בנקודת היעד שגוי או מכיל תווים לא רצויים (כמו רווח).

תיקון

כדי לאבחן ולפתור את הבעיה, אפשר לעיין במדריך בנושא השגיאה 503 Service Unavailable עם TARGET_CONNECT_TIMEOUT.

השגיאה הזו יכולה להתרחש גם אם שרת בק-אנד סוגר את החיבור לפני הזמן, בזמן שמעבד בקשות עדיין שולח את מטען ייעודי (payload) לשרת בק-אנד.

messaging.adaptors.http.flow.SslHandshakeFailed

  • קוד סטטוס של HTTP:
503 Service Unavailable
  • הודעת שגיאה:
SSL Handshake failed {error_message}
  • סיבה אפשרית:

השגיאה הזו מתרחשת במהלך תהליך לחיצת היד של SSL בין מעבד ההודעות של Apigee לבין שרת הקצה העורפי אם:

  1. מאגר האישורים של מעבד ההודעות ב-Apigee:
    • מכיל שרשרת אישורים שלא תואמת לשרשרת האישורים המלאה של שרת הקצה העורפי
    • או

    • לא מכיל את שרשרת האישורים המלאה של שרת הקצה העורפי
  2. שרשרת האישורים שהוצגה על ידי שרת הקצה העורפי:
    • מכיל שם דומיין שמוגדר במלואו (FQDN) שלא תואם לשם המארח שצוין בנקודת הקצה של היעד
    • או

    • מכיל שרשרת אישורים שגויה או לא מלאה
  3. שרת הקצה העורפי דוחה את גרסת ה-TLS שבה נעשה שימוש ב-Apigee.

    לדוגמה, אם שרת הקצה העורפי מקבל רק TLS בגרסה 1.3, אבל שרת היעד בצד של Apigee מוגדר עם TLS בגרסה 1.2 בשדה TLS Protocol (או שלא מוגדרת בכלל גרסת TLS, ובמקרה כזה Apigee לא ישתמש כרגע ב-TLS בגרסה 1.3 כברירת מחדל), החיבור ייכשל בגלל חוסר התאמה בין גרסאות הפרוטוקול.

messaging.adaptors.http.flow.UnexpectedEOFAtTarget

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Unexpected EOF at target
  • הסיבה:
TARGET_READ_UNEXPECTED_EOF
  • סיבה אפשרית:

השגיאה הזו מתרחשת באחד מהתרחישים הבאים:

  1. ההגדרה של TargetServer לא תומכת בחיבורי TLS/SSL ב-Apigee.
  2. יכול להיות שהשרת העורפי יסגור את החיבור באופן פתאומי, בזמן שמערכת Apigee ממתינה לתגובה מהשרת העורפי.
  3. הגדרת פסק זמן של Keep-alive שגויה ב-Apigee ובשרת הקצה העורפי.
  4. שרת היעד מצפה שערך הכותרת Host יהיה שם ה-DNS של היעד, ולא שם המארח של ה-proxy. הפתרון הוא להגדיר את use.proxy.host.header.with.target.uri לערך true במאפיין נקודת הקצה HTTPTargetConnection. חומר עזר בנושא מאפייני נקודות קצה

messaging.adaptors.http.flow.BadGateway

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Bad Gateway
  • סיבה אפשרית:

השגיאה הזו מתרחשת אם שרת היעד שולח בחזרה ל-Apigee תגובת HTTP בפורמט שגוי.

messaging.runtime.*

messaging.runtime.RouteFailed

  • קוד סטטוס של HTTP:
500 Internal Server Error
  • הודעת שגיאה:
Unable to route the message to a TargetEndpoint
  • סיבה אפשרית:

השגיאה הזו מתרחשת אם Apigee לא יכול לנתב את הבקשה לאף אחד מ-TargetEndpoints כי:

  • אין תנאי של כלל ניתוב (<RouteRule>) שתואם לבקשה בשרת proxy
  • וגם

  • לא מוגדר כלל ניתוב כברירת מחדל ב-ProxyEndpoint (כלומר, <RouteRule> ללא תנאי)

תיקון

כדי לפתור את השגיאה הזו, פועלים לפי ההוראות הבאות:

  1. בודקים את כללי הניתוב שהוגדרו ב-ProxyEndpoint ומשנים אותם כדי לוודא שיש לפחות תנאי אחד בכלל הניתוב שתואם לבקשה.
  2. מומלץ להגדיר כלל ניתוב ברירת מחדל ללא תנאי אם יש לכם כמה כללי ניתוב.
  3. חשוב לוודא שכלל ברירת המחדל של המסלול מוגדר תמיד אחרון ברשימת המסלולים המותנים, כי הכללים מוערכים מלמעלה למטה ב-ProxyEndpoint.

מידע נוסף על הגדרת תנאים ב-ProxyEndpoint זמין במאמר Conditional Targets.<RouteRule>

protocol.http.* - Caused due to bad request

protocol.http.BadFormData

  • קוד סטטוס של HTTP:
500 Internal Server Error
  • הודעת שגיאה:
Bad Form Data
  • סיבה אפשרית:

השגיאה הזו מתרחשת רק אם מתקיימים כל התנאים הבאים:

  1. בקשת ה-HTTP שנשלחת מהלקוח אל Apigee מכילה:
    • Content-Type: application/x-www-form-urlencoded, וגם
    • נתוני טופס עם סימן האחוז (%), או סימן האחוז (%) ואחריו תווים הקסדצימליים לא חוקיים שאסורים לפי טפסים – סעיף 17.13.4.1.
  2. ה-API proxy ב-Apigee קורא את הפרמטרים הספציפיים של הטופס שמכילים תווים אסורים באמצעות מדיניות ExtractVariables או AssignMessage בזרימת הבקשה.

protocol.http.DuplicateHeader

  • קוד סטטוס של HTTP:
400 Bad Request
  • הודעת שגיאה:
Duplicate Header "{header_name}"
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם כותרת HTTP ספציפית שלא יכולה להופיע יותר מפעם אחת ב-Apigee, מופיעה יותר מפעם אחת עם ערכים זהים או שונים כחלק מבקשת ה-HTTP שנשלחת מאפליקציית הלקוח אל Apigee.
  • מפרט HTTP:
RFC 7230, section 3.2.2: Field Order

protocol.http.EmptyHeaderName

  • קוד סטטוס של HTTP:
400 Bad Request
  • הודעת שגיאה:
Header name cannot be empty
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם שם הכותרת שנשלח כחלק מבקשת ה-HTTP מאפליקציית הלקוח אל Apigee ריק.
  • מפרט HTTP:
RFC 7230, section 3.2: Header Fields

תיקון

צריך לוודא שבקשת ה-HTTP שנשלחת מאפליקציית הלקוח אל Apigee תמיד מכילה שם כותרת תקין, בהתאם ל- RFC 7230, סעיף 3.2: שדות כותרת.

protocol.http.HeaderNameWithNonAsciiChar

  • קוד סטטוס של HTTP:
400 Bad Request
  • הודעת שגיאה:
Header {header_name} contains non ascii character {character}
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם שם הכותרת שנשלח כחלק מבקשת ה-HTTP על ידי אפליקציית הלקוח אל Apigee מכיל תווים שהם לא תווי ASCII.
  • מפרט HTTP:

RFC 7230, section 3.2: Header Fields and RFC 7230, section 3.2.6: Field Value Components

תיקון

מוודאים שבקשת ה-HTTP של הלקוח שנשלחת אל Apigee לא מכילה תווים שאינם ASCII בשמות הכותרות, בהתאם ל RFC 7230, סעיף 3.2.6: רכיבי ערך השדה.

protocol.http.HeaderWithInvalidChar

  • קוד סטטוס של HTTP:
400 Bad Request
  • הודעת שגיאה:
Header {header_name} contains invalid character {character}
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם שם הכותרת שנשלח כחלק מבקשת ה-HTTP על ידי אפליקציית הלקוח אל Apigee מכיל תווים לא תקינים כמו סימן שווה (=), פסיק (,), נקודה ופסיק (;), Tab,‏ CRLF ותו שורה חדשה.
  • מפרט HTTP:

RFC 7230, section 3.2: Header Fields and RFC 7230, section 3.2.6: Field Value Components

תיקון

מוודאים שבקשת ה-HTTP שנשלחת מאפליקציית הלקוח אל Apigee לא מכילה תווים לא תקינים בשמות הכותרות, בהתאם ל- RFC 7230, section 3.2.6: Field Value Components

protocol.http.InvalidPath

  • קוד סטטוס של HTTP:
400 Bad Request
  • הודעת שגיאה:
Invalid path {path}
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם הנתיב בכתובת ה-URL של בקשת ה-HTTP שנשלחת מאפליקציית הלקוח אל Apigee מכיל תווים שלא מותרים לפי המפרט RFC 3986, סעיף 3.3: נתיב.
  • מפרט HTTP:

RFC 3986, section 3: Syntax Components and RFC 3986, section 3.3: Path

תיקון

חשוב לוודא שהנתיב בכתובת ה-URL של בקשת ה-HTTP שנשלחת מאפליקציית הלקוח אל Apigee לא מכיל תווים שלא מותרים לפי RFC 3986, סעיף 3.3: נתיב.

protocol.http.MessageReadError

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Unexpected I/O after message headers have been read.
  • סיבה אפשרית:
השגיאה הנדירה הזו מתרחשת כש-MP מקבל קלט/פלט בערוץ כשהוא לא מצפה לכך. ה-MP קורא בקשה, קרא את כל הכותרות ומוגדר לקרוא את מטען הבקשה. אחר כך המערכת נתקלת באירוע קלט/פלט שנראה שמתייחס לאותם כותרים.

תיקון

כדי לקבל מידע נוסף על מה שקורה, מאתרים את הודעת היומן.

logger.atSevere().log(
    "Unexpected I/O after message headers have been read. Channel diagnostics=%s."
        + " HeartBeat=%s",
    input.client().getDiagnostic(), message.getHeaders().isHeartBeat());
                

protocol.http.NoResolvedHost

  • קוד סטטוס של HTTP:
503 Service Unavailable
  • הודעת שגיאה:

Unable to resolve host {hostname}

כאשר: {hostname} הוא דינמי והערך שלו ישתנה בהתאם לשם המארח שצוין.

  • הסיבה:
TARGET_CONNECT_HOST_NOT_REACHABLE
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם מארח שרת היעד שצוין שגוי או מכיל תווים לא רצויים (כמו רווח).

protocol.http.TooBigBody

  • קוד סטטוס של HTTP:
413 Request Entity Too Large
  • הודעת שגיאה:
Body buffer overflow
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם גודל מטען הייעודי (payload) שנשלח על ידי אפליקציית הלקוח כחלק מ בקשת HTTP אל Apigee גדול מהמגבלה המותרת ב-Apigee.
  • מגבלות:
מגבלות ב-Apigee

protocol.http.TooBigHeaders

  • קוד סטטוס של HTTP:
431 Request Header Fields Too Large
  • הודעת שגיאה:
request headers size exceeding {limit}
  • סיבה אפשרית:
הגודל הכולל של כל כותרות הבקשה שנשלחו על ידי אפליקציית הלקוח כחלק מבקשת ה-HTTP אל Apigee גדול מהמגבלה המותרת ב-Apigee.
  • מפרט HTTP:
RFC 6585, section 5: 431 Request Header Fields Too Large
  • מגבלות:
מגבלות ב-Apigee

protocol.http.TooBigLine

  • קוד סטטוס של HTTP:
414 Request-URI Too Long
  • הודעת שגיאה:
request line size exceeding {limit}
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם הגודל של שורת הבקשה שנשלחת על ידי אפליקציית הלקוח כחלק מבקשת HTTP אל Apigee גדול מהמגבלה המותרת ב-Apigee.
  • מגבלות:
מגבלות ב-Apigee

protocol.http.UnsupportedEncoding

  • קוד סטטוס של HTTP:
415 Unsupported Media
  • הודעת שגיאה:
Unsupported Encoding "{encoding}"
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם הכותרת Content-Encoding שנשלחת על ידי הלקוח כחלק מתגובת ה-HTTP מכילה קידוד או פורמט מטען ייעודי (payload) שלא נתמכים על ידי Apigee.
  • מפרט HTTP:
RFC 7231, section 6.5.13: 415 Unsupported Media Type

protocol.http.* - Caused by target

protocol.http.BadPath

  • קוד סטטוס של HTTP:
500 Internal Server Error
  • הודעת שגיאה:
Invalid request path
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם כתובת ה-URL של הבקשה של השרת העורפי, שמיוצגת על ידי משתנה הזרימה target.url, מכילה נתיב שמתחיל בסימן שאלה (?) במקום בקו נטוי (/), וזה לא תקין.
  • מפרט HTTP:

RFC 3986, section 3: Syntax Components and RFC 3986, section 3.3: Path

protocol.http.DuplicateHeader

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Duplicate Header "{header_name}"
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם כותרת HTTP ספציפית שאסור להכיל כפילויות ב-Apigee מופיעה יותר מפעם אחת עם ערכים זהים או שונים כחלק מתגובת ה-HTTP שנשלחת משרת הקצה העורפי אל Apigee.
  • מפרט HTTP:
RFC 7230, section 3.2.2: Field Order

protocol.http.EmptyHeaderName

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Header name cannot be empty
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם שם הכותרת שנשלח על ידי שרת הקצה העורפי כחלק מתגובת ה-HTTP אל Apigee הוא ריק.
  • מפרט HTTP:
RFC 7230, section 3.2: Header Fields

תיקון

מוודאים שתגובת ה-HTTP שנשלחת משרת ה-Backend אל Apigee תמיד מכילה שם כותרת תקין בהתאם ל- RFC 7230, סעיף 3.2: שדות כותרת.

protocol.http.EmptyPath

  • קוד סטטוס של HTTP:
500 Internal Server Error
  • הודעת שגיאה:
Request path cannot be empty
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם כתובת ה-URL של בקשת ה-HTTP של שרת הקצה העורפי, שמיוצגת על ידי משתנה הזרימה target.url, מכילה נתיב ריק.
  • מפרט HTTP:

RFC 3986, section 3: Syntax Components and RFC 3986, section 3.3: Path

protocol.http.HeaderNameWithNonAsciiChar

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Header {header_name} contains non ascii character {character}
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם שם הכותרת שנשלח על ידי שרת הקצה העורפי כחלק מתגובת ה-HTTP ל-Apigee Edge מכיל תווים שהם לא תווי ASCII.
  • מפרט HTTP:

RFC 7230, section 3.2: Header Fields and RFC 7230, section 3.2.6: Field Value Components

תיקון

מוודאים שתגובת ה-HTTP של שרת הקצה העורפי שנשלחת אל Apigee לא מכילה תווים שאינם ASCII בשמות של כותרות, בהתאם ל RFC 7230, סעיף 3.2.6: רכיבי ערך השדה.

protocol.http.HeaderWithInvalidChar

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Header {header_name} contains invalid character {character}
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם שם הכותרת שנשלח על ידי שרת הקצה העורפי כחלק מתגובת ה-HTTP, מכיל תווים לא תקינים כמו סימן שווה (=), פסיק (,), נקודה ופסיק (;), טאב, CRLF ותו מעבר שורה.
  • מפרט HTTP:

RFC 7230, section 3.2: Header Fields and RFC 7230, section 3.2.6: Field Value Components

תיקון

מוודאים שתגובת ה-HTTP של שרת הקצה העורפי שנשלחת אל Apigee לא מכילה תווים לא חוקיים בשמות הכותרות, בהתאם ל RFC 7230, section 3.2.6: Field Value Components

protocol.http.ProxyTunnelCreationFailed

  • קוד סטטוס של HTTP:
503 Service Unavailable
  • הודעת שגיאה:
Proxy refused to create tunnel with response status {status code}
  • סיבה אפשרית:

השגיאה הזו מתרחשת במהלך יצירת המנהרה בין Apigee לבין שרת הבק-אנד על ידי שרת ה-proxy, בגלל חומת אש, ACL (רשימה של בקרת גישה), בעיות ב-DNS, זמינות של שרת הבק-אנד וכו'.

הערה: קוד הסטטוס בהודעת השגיאה (faultstring) מציין את הסיבה העיקרית לבעיה.

protocol.http.Response306Reserved

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Response Status code 306 is reserved, so can't be used.
  • סיבה אפשרית:

השגיאה הזו מתרחשת אם שרת הקצה העורפי הגיב ל-Apigee עם קוד סטטוס 306.

קוד הסטטוס 306 הוגדר בגרסה קודמת של מפרט ה-HTTP. בהתאם למפרט HTTP הנוכחי, הקוד הזה שמור ואין להשתמש בו.

  • מפרט HTTP:
RFC 7231, section 6.3.5: 306 Reserved

תיקון

מכיוון שקוד הסטטוס 306 שמור, צריך לוודא ששרת הקצה העורפי לא משתמש בקוד הסטטוס הזה בזמן שליחת תגובה ל-Apigee.

protocol.http.Response405WithoutAllowHeader

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Received 405 Response without Allow Header
  • סיבה אפשרית:
השרת בקצה העורפי משיב עם קוד סטטוס 405 Method Not Allowed בלי הכותרת Allow.
  • מפרט HTTP:

RFC 7231, סעיף 6.5.5: 405 Method Not Allowed וגם RFC 7231, סעיף 7.4.1: Allow

protocol.http.ResponseWithBody

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Received {status_code} Response with message body
  • סיבה אפשרית:

השגיאה הזו מתרחשת אם תגובת ה-HTTP משרת ה-Backend אל Apigee היא 204 No Content או 205 Reset Content, אבל היא מכילה את גוף התגובה או אחת או יותר מהכותרות הבאות:

  • Content-Length
  • Content-Encoding
  • Transfer-Encoding
  • מפרט HTTP:

RFC 7231, section 6.3.5: 204 No Content and RFC 7231, section 6.3.6: 205 Reset Content

protocol.http.TooBigBody

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
Body buffer overflow
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם גודל מטען הייעודי (payload) שנשלח על ידי אפליקציית הלקוח כחלק מ בקשת HTTP אל Apigee גדול מהמגבלה המותרת ב-Apigee.
  • מגבלות:
מגבלות ב-Apigee

protocol.http.TooBigHeaders

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
response headers size exceeding {limit}
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם הגודל הכולל של כל כותרות התגובה שנשלחות על ידי שרת הקצה העורפי כחלק מתגובת ה-HTTP ל-Apigee גדול מהמגבלה המותרת ב-Apigee.
  • מגבלות:
מגבלות ב-Apigee

protocol.http.TooBigLine

  • קוד סטטוס של HTTP:
502 Bad Gateway
  • הודעת שגיאה:
response line size exceeding {limit}
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם הגודל של שורת התגובה שנשלחת על ידי שרת הקצה העורפי כחלק מתגובת ה-HTTP אל Apigee גדול מהמגבלה המותרת ב-Apigee Edge.
  • מגבלות:
מגבלות ב-Apigee

protocol.http.UnsupportedEncoding

  • קוד סטטוס של HTTP:
415 Unsupported Media
  • הודעת שגיאה:
Unsupported Encoding "{encoding}"
  • סיבה אפשרית:
השגיאה הזו מתרחשת אם הכותרת Content-Encoding שנשלחת על ידי שרת בק-אנד כחלק מתגובת HTTP מכילה את פורמט הקידוד או המטען הייעודי (payload) שלא נתמך על ידי Apigee.
  • מפרט HTTP:
RFC 7231, section 6.5.13: 415 Unsupported Media Type

security.util.*

security.util.KeyAliasNotFound

  • קוד סטטוס של HTTP:
500 Internal Server Error
  • הודעת שגיאה:
KeyAlias {KeyAlias_name} is not found in Keystore {Keystore_Name}
  • סיבה אפשרית:

השגיאה הזו מתרחשת אם לא נמצא ב-מאגר המפתחות הספציפי KeyAlias מסוים שאליו יש הפניה ב-TargetEndpoint או ב-TargetServer.

תיקון

מוודאים ש-KeyAlias שצוין ב-TargetEndpoint או ב-TargetServer קיים והוא חלק ממאגר המפתחות הספציפי.

security.util.TrustStoreWithNoCertificates

  • קוד סטטוס של HTTP:
500 Internal Server Error
  • הודעת שגיאה:
TrustStore {truststore_name} has no certificates
  • סיבה אפשרית:

השגיאה הזו מתרחשת אם מאגר האישורים הספציפי שאליו יש הפניה ב-TargetEndpoint או ב-TargetServer לא מכיל אישורים.

תיקון

אם רוצים לאמת את האישור של שרת הקצה העורפי ולהשתמש ב-Truststore ב-TargetEndpoint או ב-TargetServer, צריך לוודא ש-Truststore מכיל אישורים תקפים של שרת הקצה העורפי.