כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של
Apigee X. מידע
בהתאם למפרט ה-HTTP RFC 7230, סעיף 3.2.2: סדר שדות, ב-Apigee Edge מצפה שבקשת ה-HTTP מהלקוח או מתגובת ה-HTTP מהשרת העורפי לא תכיל את אותה כותרת שמועברת יותר מפעם אחת עם ערכים זהים או שונים, אלא אם לכותרת הספציפית יש חריגה ומותר שיהיו לה כפילויות.
כברירת מחדל, Apigee Edge מאפשר העברה של כפילויות וערכים מרובים לרוב כותרות ה-HTTP. עם זאת, היא לא מאפשרת כותרות מסוימות שמפורטות בקטע כותרות שלא יכולות לכלול כפילויות וערכים מרובים. לכן:
- יתקבל
400 Bad Request
עם קוד השגיאהprotocol.http.DuplicateHeader
אם הלקוח שולח בקשת HTTP עם כותרת מסוימת יותר מפעם אחת, או עם ערכים מרובים לכותרות HTTP שלא יכולים לכלול ערכים כפולים/מספר ערכים ב-Apigee Edge. - באופן דומה, תופיע
502 Bad Gateway
עם קוד שגיאהprotocol.http.DuplicateHeader
אם שרת הקצה העורפי שולח תגובת HTTP עם כותרת מסוימת יותר מפעם אחת, או עם ערכים מרובים לכותרות HTTP שלא יכולים להכיל ערכים כפולים או ערכים מרובים ב-Apigee Edge
הפתרון המומלץ לטיפול בשגיאות האלה הוא לתקן את אפליקציית הלקוח ואת שרת הקצה העורפי כך שלא ישלחו כותרות כפולות ולפעול בהתאם למפרט RFC 7230, סעיף 3.2.2: סדר שדות, כפי שמוסבר במדריכים הבאים לפתרון בעיות:
עם זאת, במקרים מסוימים כדאי להוסיף חריג כדי לכלול כפילויות וערכים מרובים עבור חלק מכותרות ה-HTTP. במצבים כאלה, ניתן לאפשר כותרות כפולות וערכים מרובים עבור כותרת HTTP ספציפית, על ידי הגדרת מאפיין HTTPHeader.HEADER_NAME
ברמת מעבד ההודעות.
במסמך הזה יש מידע על הנכס הזה, נסביר איך להפעיל את הנכס הזה כדי להימנע מהשגיאות שצוינו למעלה ושיתף שיטות מומלצות באותו נושא.
מאפייני כותרת HTTP כדי לאפשר כפילויות וערכים מרובים
ב-Apigee Edge יש את שני המאפיינים הבאים כדי לשלוט בהתנהגות של אישור כפילויות וערכים מרובים לכותרות HTTP. חשוב לשים לב שאפשר להגדיר אותם רק במעבדי הודעות באמצעות תחביר האסימונים, שמוסבר במאמר איך מגדירים את Edge.
שם הנכס | תיאור | הערכים המותרים |
---|---|---|
HTTPHeader.ANY |
המאפיין הזה מציין אם מותר להשתמש בערכים כפולים או מרובים בכל כותרות ה-HTTP, כולל הכותרות המותאמות אישית שנשלחות כחלק מבקשת ה-HTTP שנשלחה על ידי הלקוח, או תגובת HTTP שנשלחה על ידי שרת הקצה העורפי אל Apigee Edge. ערך ברירת המחדל:
|
|
|
המאפיין הזה משמש לשינוי ההתנהגות של כותרת ספציפית מזו שצוינה על ידי |
כנ"ל. |
כותרות שלא יכולות לכלול כפילויות וערכים מרובים
כפי שהוסבר קודם, Apigee Edge מאפשר כפילויות וערכים מרובים לרוב כותרות ה-HTTP כברירת מחדל. הסיבה לכך היא שהנכס HTTPHeader.ANY
מוגדר עם הערך multivalued, allowDuplicate.
ההגדרה הוחלפה
בחלק מהכותרות, הגדרת ברירת המחדל מוחלפת באחת מהשיטות הבאות:
HTTPHeader.HEADER_NAME=multivalued, allowDuplicate
ההגדרה הזו לא משנה את התנהגות ברירת המחדל. כלומר, לכותרת הספציפית מותר לכלול כפילויות וערכים מרובים
.HTTPHeader.HEADER_NAME=
ההגדרה הזו משנה את התנהגות ברירת המחדל. כלומר, לכותרת הספציפית אסור לכלול כפילויות וערכים מרובים.
זיהוי כותרות שלא יכולות לכלול כפילויות וערכים מרובים
בקטע הזה נסביר איך מזהים את הפריטים הבאים:
- הכותרות הספציפיות שבהן אסור לכלול כפילויות וערכים מרובים בהגדרת הענן הפרטי של Apigee Edge, וכן
- הכותרות הספציפיות עם הגדרות קיימות מראש
במחשב של מעבד ההודעות, מחפשים את המאפיין
HTTPHeader.
בספרייה/opt/apigee/edge-message-processor/conf
כפי שמוצג בהמשך:grep -ri "HTTPHeader." /opt/apigee/edge-message-processor/conf
פלט לדוגמה:
# grep -ri "HTTPHeader" /opt/apigee/edge-message-processor/conf /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.ANY=allowDuplicates, multiValued /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Connection=allowDuplicates, multiValued … <snipped> /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Host= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Date=allowDuplicates … <snipped>
- כמו שמוסבר בקטע החלפה של ההגדרה, חשוב לשים לב לפרטים הבאים בפלט לדוגמה שלמעלה:
- כותרת ה-HTTP
Connection
מוכתבת, אבל היא מורשית להכיל כפילויות וערכים מרובים - כותרות ה-HTTP
Host
ו-Expires
מוחלפות ולא יכולות לכלול כפילויות וערכים מרובים - כותרת ה-HTTP
Date
מוכתבת וניתן לכלול בה כפילויות, אבל אסור שיהיו לה ערכים מרובים - כל הכותרות שמופיעות כאן (
Connection
,Host
,Expires
ו-Date
בדוגמה שלמעלה) נקראות כותרות עם הגדרות אישיות קיימות במסמך הזה.
- כותרת ה-HTTP
ההתנהגות של Apigee Edge
בטבלה הבאה מוצגת ההתנהגות של Apigee Edge כשהכותרות נשלחות ככפילויות ועם ערכים מרובים, בהתאם לאופן שבו המאפיינים של HTTPHeader
מוגדרים
במעבדי ההודעות, עם דוגמה של HTTPHeader
מתוך
test-header
.
בקשה | iframe יוצא על סמך הערך של conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<ריק> | allowDuplicate | multiValued | אישור שכפול, מרובה ערכים (ברירת מחדל) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
פיצלנו את
ואז מתקבלת השגיאה |
פיצלנו את
אבל לאחר מכן הטופס המקורי נשלח ליעד. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
לפני שמתחילים
לפני שמבצעים את השלבים במסמך הזה, חשוב להבין איך מגדירים מאפיינים של Edge בענן פרטי, כפי שמתואר במאמר איך מגדירים את Edge.
הגדרת כפילויות וערכים מרובים לכותרות
כפי שמוסבר במאפיינים של כותרות HTTP כדי לאפשר כפילויות וערכים מרובים, הערך של המאפיין HTTPHeader.ANY = allowDuplicates,
multivalued
מצביע על כך שלכל הכותרות יכולות להיות כפילויות וערכים מרובים ב-Apigee Edge. עם זאת, יש כותרות מסוימות שהערכים שלהן מוחלפים באופן מפורש כדי לא לאפשר
כותרות כפולות או ערכים מרובים באמצעות המאפיין
HTTPHeader.HEADER_NAME
.
בקטע הזה נסביר איך להגדיר את המאפיין HTTPHeader.HEADER_NAME
כך שיאפשר כפילויות וערכים מרובים לכל כותרת HTTP כזו במעבדי ההודעות, באמצעות האסימון המתאים לפי התחביר שמתואר בקטע איך להגדיר את Edge.
בקטע הזה נשתמש ב-Expires
(וב-myheader
) ככותרת לדוגמה שעבורה רוצים להתיר כפילויות וערכים מרובים, כפי שמוסבר בהמשך:
-
קובעים את הערך הנוכחי של המאפיין
HTTPHeaderHEADER_NAME
כדי לוודא שהוא לא מופעל כבר, ויאפשרו כפילויות וערכים מרובים באמצעות הפקודה הבאה:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
לדוגמה, אם אתם מנסים להגדיר את המאפיין של הכותרת
Expires
, עליכם לבדוק את הערך הנוכחי של האסימוןHTTPHeader.Expires
של המאפיין במעבד ההודעות:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
הפלט של הפקודה שלמעלה מוביל לאחת מהאפשרויות הבאות:
- המאפיין מוגדר לריק, ואז ניתן להסיק שהערך מוחלף (וזו
כותרת עם pre-existing config) שלא מאפשרת כותרות כפולות וערכים
מרובים. כלומר, לא ניתן לשלוח את הכותרת
Expires
יותר מפעם אחת כחלק מבקשת ה-HTTP או מתגובת ה-HTTP ל-Apigee. - אין היטים לנכס הספציפי, לכן הערך לא מוחלף (וזו לא כותרת עם תצורה קיימת מראש). המשמעות היא שניתן לשלוח את הכותרת הספציפית יותר מפעם אחת (מותר לשלוח עותקים כפולים) כחלק מבקשת ה-HTTP או מתגובת ה-HTTP ל-Apigee Edge.
- המאפיין מוגדר עם הערך
allowDuplicates, multivalued
, והמשמעות היא שהערך מוחלף באופן מפורש (וזו כותרת עם הגדרות אישיות). המשמעות היא שניתן לשלוח את הכותרת הספציפית יותר מפעם אחת (מותר לשלוח עותקים כפולים) כחלק מבקשת ה-HTTP או מתגובת ה-HTTP ל-Apigee.
פלט לדוגמה של פקודת החיפוש:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
לפי הפלט של הדוגמה שלמעלה, הנכס
HTTPHeader.Expires
מוגדר כריק. פירוש הדבר הוא שהמאפיין מוחלף כדי לא לאפשר ערכים כפולים או מרובים עבור הכותרתExpires
. - המאפיין מוגדר לריק, ואז ניתן להסיק שהערך מוחלף (וזו
כותרת עם pre-existing config) שלא מאפשרת כותרות כפולות וערכים
מרובים. כלומר, לא ניתן לשלוח את הכותרת
- אם שמתם לב שהנכס שתואם לכותרת הספציפית מוחלף באופן מפורש כדי לא לאפשר ערכים כפולים או מרובים כמו בפלט לדוגמה שלמעלה, רק לאחר מכן מבצעים את השלבים הבאים. אם הוא לא מוחלף באופן מפורש, מדלגים על שאר השלבים בקטע הזה.
- עריכה. אם היא לא קיימת, אפשר ליצור אותה:
/opt/apigee/customer/application/message-processor.properties
לדוגמה, כדי לפתוח את הקובץ באמצעות vi, מזינים את הפרטים הבאים:
vi /opt/apigee/customer/application/message-processor.properties
- מוסיפים שורה בפורמט הבא:
conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
- שומרים את השינויים.
צריך לוודא שקובץ המאפיינים נמצא בבעלות המשתמש של
apigee
. אם לא, מריצים את הפקודה הבאה:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
מפעילים מחדש את מעבד ההודעות:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
כדי להפעיל מחדש בלי להשפיע על התנועה, קראו את המאמר הפעלה מחדש של מעבדי הודעות ללא השפעה על התנועה.
- אם יש לכם יותר ממעבד הודעות אחד, צריך לחזור על השלבים שלמעלה בכל מעבדי ההודעות.
אימות הכותרת מוגדר כך שיש בו כפילויות וערכים מרובים
בקטע הזה מוסבר איך לוודא שהמאפיין
HTTPHeader.HEADER_NAME
של כותרת ספציפית עודכן בהצלחה
כדי לאפשר כפילויות במעבדי ההודעות.
נשתמש ב-Expires
ככותרת לדוגמה, ונבדוק אם הנכס המתאים
HTTPHeader.Expires
עודכן.
למרות שמשתמשים באסימון conf_http_HTTPHeader.Expires
כדי לעדכן את הערך
במעבד ההודעות, עדיין צריך לבדוק אם המאפיין HTTPHeader.Expires
הוגדר עם הערך החדש.
- במחשב, מחפשים את המאפיין
HTTPHeader.HEADER_NAME
בספרייה/opt/apigee/edge-message-processor/conf
ובודקים אם הוא הוגדר עם הערך החדש (כפי שמוצג בהמשך):grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
לדוגמה, כדי לבדוק שהמאפיין
HTTPHeader.Expires
מוגדר עם הערך החדש, מריצים את הפקודה הבאה:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- אם הערך החדש הוגדר בהצלחה עבור
HTTPHeader.HEADER_NAME
במעבד ההודעות, הפקודה שלמעלה תציג את הערך החדש בקובץhttp.properties
. התוצאה לדוגמה מהפקודה שלמעלה אחרי שהגדרתם את
allowDuplicates
ואתmultiValued
היא:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- בפלט לדוגמה שלמעלה, שימו לב שהנכס
HTTPHeader.Expires
הוגדר עם הערך החדשallowDuplicates, multiValued
ב-http.properties
. המשמעות היא שההתנהגות שמאפשרת כפילויות וערכים מרובים ב-HTTPHeader
הוגדרה בהצלחה במעבד ההודעות. - אם עדיין מופיע הערך הישן של המאפיין
HTTPHeader.HEADER_NAME
, מוודאים שביצעתם את כל השלבים המפורטים בקטע הגדרה של כפילויות וערכים מרובים לכותרות בצורה נכונה. אם החמצתם שלב כלשהו, יש לחזור על כל השלבים בצורה נכונה.חשוב לוודא ששרתי ה-proxy פועלים כמצופה, במיוחד אם יש לוגיקה פונקציונלית לקבלת ולהגדרה של הכותרות בשרת ה-proxy.
- אם עדיין אין לך אפשרות לשנות את הנכס, כדאי לפנות לתמיכה של Apigee Edge
השבתת allowכפילויות בכותרות
בקטע הזה מוסבר איך להגדיר את המאפיין HTTPHeader.{Headername}
כך שלא יאפשר כפילויות וערכים מרובים לכותרת HTTP ספציפית במעבדי ההודעות, תוך שימוש באסימון המתאים לפי התחביר שמתואר בקטע איך להגדיר את Edge.
בקטע הזה נשתמש ב-Expires
(וב-myheader
) ככותרת לדוגמה שעבורה אנחנו לא רוצים להתיר כפילויות, כפי שמוסבר בהמשך:
-
קובעים את הערך הנוכחי של המאפיין
HTTPHeaderHEADER_NAME
כדי לוודא שהוא לא מושבת כדי לאפשר כפילויות וערכים מרובים באמצעות הפקודה הבאה:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
לדוגמה, אם מנסים להגדיר את המאפיין לכותרת
Expires
, צריך לבדוק את הערך הנוכחי של האסימוןHTTPHeader.Expires
של המאפיין במעבד ההודעות:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
הפלט של הפקודה שלמעלה מוביל לאחת מהאפשרויות הבאות:
- המאפיין מוגדר כריק, ולכן ניתן להסיק שהערך מוחלף ל-NOT
כדי לאפשר כותרות כפולות וערכים מרובים. כלומר, אסור לך לשלוח את הכותרת
Expires
יותר מפעם אחת כחלק מבקשת ה-HTTP או מתגובת HTTP ל-Apigee. - אין היטים לנכס הספציפי. כלומר, הערך לא מחליף וזו כותרת NOT עם הגדרה קיימת מראש. המשמעות היא שניתן לשלוח את הכותרת הספציפית יותר מפעם אחת (אפשר לשלוח הודעות כפולות) כחלק מבקשת ה-HTTP או מתגובת ה-HTTP ל-Apigee Edge.
- המאפיין מוגדר עם הערך
allowDuplicates, multivalued
, אז הערך מוחלף באופן מפורש וזוהי הגדרה קיימת. עם זאת, המשמעות היא שניתן לשלוח את הכותרת הספציפית יותר מפעם אחת (מותר לשלוח כפילויות) כחלק מבקשת ה-HTTP או מתגובת ה-HTTP ל-Apigee.
פלט לדוגמה מס' 1
פלט לדוגמה מס' 1 של פקודת החיפוש:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
הפלט של הדגימה מראה שהנכס
HTTPHeader.Expires
מוגדר לערךallowDuplicates, multiValued
. פירוש הדבר הוא שהמאפיין מוחלף כדי לאפשר ערכים כפולים או מרובים עבור הכותרתExpires
.פלט לדוגמה מס' 2
דוגמה לפקודה ופלט 2 של פקודת החיפוש
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
הפלט של הדגימה לא מציג פלט, ולכן הנכס
HTTPHeader.myheader
מוגדר ל-allowDuplicates, multiValued
כברירת מחדל. כמו כן, ניתן להסיק שהנכס לא מחליף בכותרת myheader, - המאפיין מוגדר כריק, ולכן ניתן להסיק שהערך מוחלף ל-NOT
כדי לאפשר כותרות כפולות וערכים מרובים. כלומר, אסור לך לשלוח את הכותרת
- אם מופיעה אחת מהפעולות הבאות, מבצעים את שאר השלבים שמפורטים בקטע הזה:
- הנכס שתואם לכותרת הספציפית מוחלף כדי לאפשר כפילויות וערכים מרובים כמו בפלט לדוגמה מס' 1 שלמעלה (כותרת עם הגדרות קיימות מראש)
- אין היטים עבור הנכס שתואם לכותרת המסוימת, כמו בפלט לדוגמה מס' 2 שלמעלה (לא כותרת עם הגדרה קיימת מראש)
אם לא, דלגו על שאר השלבים בקטע הזה.
- עריכת הקובץ הבא אם היא לא קיימת, ניתן ליצור אותה.
/opt/apigee/customer/application/message-processor.properties
לדוגמה, כדי לפתוח את הקובץ באמצעות vi, מזינים את הפרטים הבאים:
vi /opt/apigee/customer/application/message-processor.properties
- מוסיפים שורה בפורמט הבא לקובץ המאפיינים:
הגדרה קיימת מראש
תרחיש מס' 1: כותרת עם הגדרות קיימות מראש:
conf_http_HTTPHeader.Expires=
ללא הגדרות אישיות קיימות
תרחיש מס' 2: לא כותרת עם הגדרה קיימת:
conf/http.properties+HTTPHeader.myheader=
- שומרים את השינויים.
- צריך לוודא שקובץ המאפיינים נמצא בבעלות המשתמש של
apigee
. אם לא, מריצים את הקוד הבא:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- מפעילים מחדש את מעבד ההודעות:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
כדי להפעיל מחדש בלי להשפיע על התנועה, קראו את המאמר הפעלה מחדש של מעבדי הודעות ללא השפעה על התנועה.
- אם יש לכם יותר ממעבד הודעות אחד, צריך לחזור על השלבים שלמעלה בכל מעבדי ההודעות.
אימות הכותרת מוגדר כך שלא יאפשר כפילויות וערכים מרובים
בקטע הזה מוסבר איך לוודא שהמאפיין
HTTPHeader.HEADER_NAME
של כותרת ספציפית עודכן בהצלחה
כדי למנוע כפילויות במעבדי ההודעות.
נשתמש ב-Expires
(וב-myheader
) ככותרת לדוגמה, ונבדוק אם
הנכס התואם HTTPHeader.Expires
(וגם
HTTPHeader.myheader
) עודכן.
במחשב, מחפשים את המאפיין
HTTPHeader.HEADER_NAME
בספרייה/opt/apigee/edge-message- processor/conf
ובודקים אם הוא הוגדר עם הערך החדש כפי שמוצג בהמשך:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
לדוגמה, כדי לבדוק שהמאפיין
HTTPHeader.Expires
מוגדר עם הערך החדש, מריצים את הפקודה הבאה:הגדרה קיימת מראש
grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
ללא הגדרות אישיות קיימות
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
- אם הערך של כותרת ה-HTTP החדשה הוגדר בהצלחה עבור
HTTPHeader.HEADER_NAME
I במעבד ההודעות, הפקודה שלמעלה תציג את הערך החדש בקובץhttp.properties
. - זו התוצאה לדוגמה מהפקודה שלמעלה אחרי ההשבתה של
allowDuplicates
:הגדרה קיימת מראש
תרחיש מס' 1: בתוקף עד כותרת (כותרת עם pre-existing config)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
ללא הגדרות אישיות קיימות
תרחיש מס' 2: כותרת myheader (לא כותרת עם הגדרה קיימת)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
- בפלט לדוגמה שלמעלה, שימו לב שהנכס
HTTPHeader.Expires
( ו-HTTPHeader.myheader
) הוגדר עם הערך החדש {blank}
ב-http.properties
. המשמעות היא שההתנהגות שמאפשרת כפילויות וערכים מרובים עבור כותרת ה-HTTP הספציפיתExpires
(ו-myheader
) הושבתה בהצלחה במעבד ההודעות. אם הערך הישן של המאפיין
HTTPHeader.Expires (or HTTPHeader.myheader)
עדיין מופיע, צריך לוודא שביצעתם את כל השלבים המפורטים בקטע הגדרה של allowכפילויות וערכים מרובים לכותרות. אם החמצתם שלב כלשהו, יש לחזור על כל השלבים בצורה נכונה.חשוב לוודא ששרתי ה-proxy פועלים כמצופה, במיוחד אם יש לוגיקה פונקציונלית לקבל ולהגדיר את הכותרות בשרת ה-proxy.
- אם עדיין אין לכם אפשרות לשנות את המאפיין, תוכלו לפנות לתמיכה של Apigee Edge.