מוצג המסמך של 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
.
בקשה | MID יוצא על סמך ערך של conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<ריק> | allowDuplicate | multiValued | Allowשכפול, ריבוי ערכים (DEFAULT) | |
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
כדי לאפשר כפילויות ומספר ערכים לכל שם
במעבדי ההודעות, תוך שימוש באסימון המתאים, בהתאם לתחביר
במאמר איך מגדירים את 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
הפלט של הפקודה שלמעלה יגרום לאחת מהאפשרויות הבאות:
- המאפיין מוגדר כריק, ואז הוא מרמז שהערך הוחלף (ו
היא כותרת עם תצורה קיימת) שלא מאפשרת כותרות כפולות
ערכים. כלומר, אין לך הרשאה לשלוח את הכותרת
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
. - המאפיין מוגדר כריק, ואז הוא מרמז שהערך הוחלף (ו
היא כותרת עם תצורה קיימת) שלא מאפשרת כותרות כפולות
ערכים. כלומר, אין לך הרשאה לשלוח את הכותרת
- אם שמתם לב שהמאפיין שתואם לכותרת הספציפית מצוין במפורש הוחלף כדי לא לאפשר ערכים כפולים או מרובים כמו בדוגמה הפלט שלמעלה, רק לאחר מכן מבצעים את השלבים הבאים. אם לא צריך להוסיף מוחלפים, ולאחר מכן דלגו על שאר השלבים בקטע הזה.
- עריכה. אם הוא לא קיים, אפשר ליצור אותו:
/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
, לאחר מכן צריך לוודא שביצעתם את כל השלבים המפורטים מגדירים את Allowכפילות וערכים מרובים לכותרות בצורה נכונה. אם פספסתם שלב כלשהו, יש לחזור על השלבים האלה שוב בצורה נכונה.ודאו ששרתי ה-proxy שלכם פועלים כצפוי, במיוחד אם יש לוגיקה פונקציונלית לקבל ולהגדיר את הכותרות בשרת ה-proxy.
- אם עדיין אין לך אפשרות לשנות את המאפיין, צריך לפנות לתמיכה של Apigee Edge
השבתת שכפולים של כותרות
בקטע הזה מוסבר איך להגדיר את הנכס 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: כותרת בתוקף עד (כותרת עם הגדרה קיימת מראש)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
אין הגדרות קיימות
תרחיש מס' 2: myheader Header (לא כותרת עם הגדרה קיימת)
/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)
, צריך לוודא שביצעת את כל השלבים שמפורטים הגדרת שכפולים וערכים מרובים לכותרות בצורה נכונה. אם פספסתם שלב כלשהו, יש לחזור על השלבים האלה שוב בצורה נכונה.חשוב לוודא ששרתי ה-proxy פועלים כצפוי, במיוחד אם יש לוגיקה פונקציונלית כדי לקבל ולהגדיר את הכותרות בשרת ה-proxy.
- אם עדיין אין לכם אפשרות לשנות את המאפיין, עליכם לפנות לתמיכה של Apigee Edge.