תיעוד 100
כותרת Vary
עודכן לאחרונה: 14 באוגוסט 2026
כותרת תשובת ה-HTTP Vary אומרת לקלאודפלייר שמקור יכול להגיש תשובות שונות לאותה כתובת URL לפי כותרות הבקשה. לדוגמה, מקור עשוי להגיש שפות שונות לפי Accept-Language, או פורמטים שונים של תוכן לפי Accept.
כברירת מחדל, ה-CDN של קלאודפלייר בונה מפתחות מטמון מכתובת ה-URL של הבקשה ומקומץ כותרות מסוימות. כללי מטמון יכולים להוסיף מראש מאפייני בקשה אחרים למפתח המטמון. כותרת התשובה Vary מאפשרת למקור להחליט אילו כותרות בקשה חשובות כשקלאודפלייר מקבלת את התשובה.
הערה
תשובה שמכילה
Vary: *תמיד עוקפת את המטמון, בלי קשר להגדרת Vary שלך.
הדף הזה מסביר איך Vary משפיע על השמירה במטמון. כדי להגדיר את Vary, השתמש ב-Vary בהגדרות כללי המטמון, או ב-cf.vary לבקשות משנה של Workers.
היכולת הזו נפרדת מ-Vary לתמונות, שמגיש וריאנטים של פורמט תמונה על בסיס כותרת Accept באמצעות כלל וריאנטי מטמון נפרד.
#זמינות
| Free | Pro | Business | Enterprise | |
|---|---|---|---|---|
| זמינות | כן | כן | כן | כן |
#איך Vary משפיע על מפתחות המטמון
כשקלאודפלייר שומרת במטמון תשובה עם כותרת Vary, כותרות הבקשה שמופיעות בה הופכות לחלק ממפתח המטמון של התשובה הזו, לפי התנהגות שמירת המטמון ב-HTTP שמתוארת ב-RFC 9111. לאותה כתובת URL יכולות אז להיות כמה גרסאות שמורות במטמון, וכל אחת נבחרת לפי ערכי כותרות הבקשה שמופיעים בתשובת Vary של המקור.
קלאודפלייר לא יוצרת גרסאות שונות לכל תשובה שמורה במטמון רק מפני ש-Vary מוגדר בכלל מטמון. תשובת המקור חייבת לכלול כותרת Vary. אחר כך קלאודפלייר משתמשת בפעולה המוגדרת לכל כותרת שברשימה כדי להחליט איזה ערך של כותרת בקשה נוסף למפתח המטמון.
לדוגמה, נניח שהמקור מחזיר את התשובה הזו:
Vary: Accept-Language
Cache-Control: public, max-age=3600זה אומר לקלאודפלייר שערך כותרת הבקשה Accept-Language צריך להיות חלק ממפתח המטמון.
כש-accept-language מוגדר ל-normalize, שתי הבקשות האלה יכולות להשתמש באותה גרסה שמורה במטמון:
Accept-Language: en-US, fr;q=0.8
Accept-Language: fr;q=0.8, en-GBשתי כותרות הבקשה מנורמלות לאותו סדר העדפת שפות, en,fr. בקשה עם ערך מנורמל שונה, למשל Accept-Language: fr, en;q=0.8, יוצרת או בוחרת גרסה שמורה אחרת של אותה כתובת URL.
כשתשובה משתנה לפי כמה כותרות, קלאודפלייר כוללת כל כותרת שברשימה במפתח המטמון. לדוגמה, תשובה עם Vary: Accept, Accept-Language משתמשת גם בערך accept המוגדר וגם בערך accept-language המוגדר כדי לבחור את התשובה השמורה במטמון.
אם תשובת המקור לא כוללת כותרת Vary, קלאודפלייר שומרת את התשובה במטמון כרגיל. אם תשובת המקור כוללת שם כותרת Vary שמוגדר ל-bypass של המטמון, קלאודפלייר לא שומרת את התשובה הזו.
#פעולות
כל כותרת מוגדרת משתמשת באחת משלוש פעולות:
| פעולה | משמעות | מתי להשתמש |
|---|---|---|
normalize | מנרמל את ערך כותרת הבקשה לפני בחירת הגרסה השמורה במטמון. עבור כותרות נבחרות, קלאודפלייר עשויה גם להעביר את הערך המנורמל למקור. | רוב מקרי השימוש ב-Accept, ב-Accept-Language וב-Accept-Encoding. |
passthrough | משתמש בערך הגולמי של כותרת הבקשה כדי לבחור את הגרסה השמורה במטמון. הכותרת מועברת למקור בלי שינוי. | כשהבדלים מדויקים ברמת הבתים בערך הכותרת צריכים ליצור גרסאות שונות. |
bypass | עוקף את המטמון כששם הכותרת הזה מופיע בתשובת Vary של המקור. | כותרות עם יותר מדי ערכים אפשריים, ערכים לכל משתמש, או ערכים שלא רוצים לשמור במטמון. |
#נרמול
normalize מצמצם גרסאות מיותרות במטמון על ידי המרה של ערכי כותרות בקשה שקולים לאותו ערך של מפתח מטמון.
לדוגמה, שתי כותרות Accept האלה יכולות להתנרמל לאותו ערך:
Accept: text/html, application/json;q=0.9
Accept: application/json;q=0.9, text/html#העברה כפי שהיא
passthrough משתמש בערך הגולמי של כותרת הבקשה בבחירת גרסה שמורה במטמון. ערכים שקולים מבחינת המשמעות עדיין יכולים ליצור גרסאות שמורות שונות אם הבתים שונים.
לדוגמה, תחת passthrough, שתי הבקשות האלה בוחרות גרסאות שמורות שונות:
Accept: text/html, application/json
Accept: application/json, text/htmlהשתמש ב-passthrough רק כשערך הכותרת המדויק חשוב למקור שלך וצריך להיות חשוב גם למטמון.
#עקיפה
bypass אומר לקלאודפלייר לא לשמור במטמון תשובה כשתשובת Vary של המקור כוללת את שם הכותרת הזה.
לדוגמה, אם ההגדרה שלך קובעת את user-agent ל-bypass, תשובה עם הכותרת הזו לא נשמרת במטמון:
Vary: User-Agent#התנהגות הנרמול
נרמול Vary הוא הנרמול שמבוצע כשהפעולה המוגדרת היא normalize. הוא משפיע על האופן שבו קלאודפלייר בוחרת גרסה שמורה במטמון, ולגבי חלק מהכותרות, גם על מה שקלאודפלייר מעבירה למקור.
הנרמול אופציונלי, אבל מומלץ לרוב הפריסות כי הוא מצמצם את מספר הגרסאות השמורות במטמון ומשפר את יחס הפגיעות במטמון.
כשהפעולה של כותרת היא normalize, קלאודפלייר משתמשת בערך המנורמל כדי לבחור את הגרסה השמורה במטמון. הנרמול יכול לאבד מידע: הוא עשוי לסדר מחדש ערכים, להשמיט ערכי איכות, להמיר ערכים לאותיות קטנות, או להסיר רשומות שאינן ברשימת היתר מוגדרת.
#כותרות בבקשה למקור
עבור Accept, Accept-Language ו-Accept-Encoding כש-Respect Strong ETags מופעל, קלאודפלייר עשויה גם להעביר את ערך הכותרת המנורמל למקור. כך התשובה שהמקור יוצר נשארת עקבית עם ערך מפתח המטמון שקלאודפלייר משתמשת בו לשמירה במטמון.
לדוגמה, אם accept-language מנרמל את שתי הבקשות האלה ל-en,fr, קלאודפלייר מעבירה Accept-Language: en,fr למקור בהחטאת מטמון או באימות מחדש:
Accept-Language: en-US, fr;q=0.8
Accept-Language: fr;q=0.8, en-GBהעברת הערך המנורמל מונעת מקלאודפלייר לשמור תשובה שנוצרה לערך כותרת גולמי אחד תחת ערך מנורמל רחב יותר, שבקשה אחרת עלולה אחר כך לעשות בו שימוש שגוי.
שכתוב בקשת המקור הזה חל על:
AcceptAccept-LanguageAccept-Encoding, רק כש-Respect Strong ETags מופעל
השכתוב הזה לא חל על:
- כותרות שמוגדרות כ-
passthrough - כותרות שמוגדרות כ-
bypass - כותרות גנריות אחרות
השכתוב הזה קורה לפני שקלאודפלייר מקבלת את תשובת המקור, ולכן הוא מבוסס על הגדרת כלל המטמון שלך. אם Accept, Accept-Language או Accept-Encoding מוגדר עם normalize, קלאודפלייר משכתבת את כותרת הבקשה הזו בהעברה למקור גם אם התשובה הסופית של המקור לא מציינת את הכותרת הזו ב-Vary. בחירת המטמון והעקיפה עדיין תלויות בכותרת Vary של תשובת המקור.
אם הנרמול מצמצם כותרת לערך ריק, למשל מפני שאף אחד מערכי הבקשה לא תואם לרשימת media_types או languages מוגדרת, קלאודפלייר מסירה את הכותרת הזו מבקשת המקור.
#Accept
קלאודפלייר מנרמלת את כותרת הבקשה Accept בשלבים הבאים:
- המרת סוגי MIME לאותיות קטנות.
- הסרת רווח לבן אופציונלי.
- מיון סוגי MIME לפי ערך האיכות. סוגים עם אותו ערך איכות ממוינים לפי סדר האלפבית.
- הסרת פרמטרים.
ערכי האיכות משמשים למיון ואחר כך מוסרים מהערך המנורמל. q=0 נשמר כי המשמעות שלו היא "לא קביל", והוא צריך להישאר מובחן מערך בעדיפות נמוכה.
אפשר לספק רשימת media_types אופציונלית. אם היא סופקה, כל סוג MIME שאינו ברשימה מוסר מהערך המנורמל.
#Accept-Language
קלאודפלייר מנרמלת את כותרת הבקשה Accept-Language בשלבים הבאים:
- המרת השפות לאותיות קטנות.
- הסרת רווח לבן אופציונלי.
- מיון השפות לפי ערך האיכות. שפות עם אותו ערך איכות ממוינות לפי סדר האלפבית.
- הסרת פרמטרים.
- הסרת וריאנטים של אזור. לדוגמה,
en-USהופך ל-en. אם קיימים כמה וריאנטים של אזור לאותה שפה, הם מאוחדים לפריט אחד.
ערכי האיכות משמשים למיון ואחר כך מוסרים מהערך המנורמל. q=0 נשמר כי המשמעות שלו היא "לא קביל", והוא צריך להישאר מובחן מערך בעדיפות נמוכה.
אפשר לספק רשימת languages אופציונלית. אם היא סופקה, כל שפה שאינה ברשימה מוסרת מהערך המנורמל. אם פריט ברשימה מציין וריאנט של אזור, ויש פריט תואם בכותרת הבקשה, וריאנט האזור נשמר בערך המנורמל.
#Accept-Encoding
כברירת מחדל, ה-CDN של קלאודפלייר דורס את כותרת Accept-Encoding לפי קידוד הדחיסה המופעל. אם דחיסת Brotli מופעלת, Accept-Encoding שמועבר למקור הוא gzip, br. אם דחיסת Brotli לא מופעלת, Accept-Encoding שמועבר למקור הוא gzip. קלאודפלייר יכולה אחר כך לדחוס מחדש נכסים שמורים במטמון לפי Accept-Encoding של המבקר. לפרטים, ראה כותרות ETag.
אפשר לכבות את ההתנהגות הזו על ידי הפעלת Respect Strong ETags. כש-Respect Strong ETags מופעל, Accept-Encoding של המבקר מועבר למקור במקום דריסת הדחיסה של קלאודפלייר. אם נרמול Vary מופעל עבור Accept-Encoding, הערך המנורמל משמש גם לבחירת הגרסה השמורה במטמון וגם כערך שמועבר למקור.
מכיוון שקלאודפלייר שולטת ב-Accept-Encoding כש-Respect Strong ETags כבוי, נרמול Accept-Encoding משכתב את בקשת המקור רק כש-Respect Strong ETags מופעל.
קלאודפלייר מנרמלת את כותרת הבקשה Accept-Encoding בשלבים הבאים:
- המרת הקידודים לאותיות קטנות.
- הסרת רווח לבן אופציונלי.
- מיון הקידודים לפי ערך האיכות. קידודים עם אותו ערך איכות ממוינים לפי סדר האלפבית.
- הסרת פרמטרים.
ערכי האיכות משמשים למיון ואחר כך מוסרים מהערך המנורמל. q=0 נשמר כי המשמעות שלו היא "לא קביל", והוא צריך להישאר מובחן מערך בעדיפות נמוכה.
#כותרות אחרות
לכל כותרת שאינה Accept, Accept-Language ו-Accept-Encoding, קלאודפלייר לא מכירה את המשמעות של השדה. הנרמול מוגבל להמרות שבטוחות לכל כותרת:
- כמה שורות שדה של אותה כותרת מאוחדות לערך אחד מופרד בפסיקים, לפי סדר הקבלה.
- רווח לבן אופציונלי סביב כל ערך נחתך.
הערכים לא מסודרים מחדש, לא מומרים לאותיות קטנות, לא מאוחדים ככפילויות, ולא משתנים בדרך אחרת, כי הסדר והתוכן של כותרת שרירותית עשויים להיות משמעותיים.
לדוגמה, שתי שורות השדה האלה:
X-Custom-Header: Value2
X-Custom-Header: Value1בבחירת גרסה שמורה במטמון, קלאודפלייר מאחדת את הערכים האלה כ-Value2,Value1. הכותרת שמועברת למקור לא משוכתבת.
#התנהגות ניקוי המטמון
ניקוי כתובת URL מנקה את כל הגרסאות השמורות במטמון של אותה כתובת URL. אין צורך לשלוח בקשת ניקוי נפרדת לכל ערך של כותרת Vary. זה חל על שיטות ניקוי שמכוונות לאובייקט השמור במטמון, כמו ניקוי לפי כתובת URL, תג, שם מארח, קידומת, או ניקוי של הכול.
שינוי הגדרת Vary לא מנקה בעצמו תוכן שמור במטמון. מכיוון שהגדרת Vary חדשה יכולה לשנות את אופן בחירת הגרסאות השמורות במטמון, בקשות עשויות להחטיא ולהתמלא מחדש תחת מפתחות המטמון החדשים עד שהרשומות השמורות הישנות יפוגו או ינוקו.